使用SQLAlchemy ORM(对象关系映射)对shmysql类进行改写,提供原shmysql类相同的功能。
时间: 2024-10-11 09:14:33 浏览: 30
Python ORM框架SQLAlchemy学习笔记之映射类使用实例和Session会话介绍
要使用SQLAlchemy ORM来重写`shmysql`类,并且保持其原有的数据库操作功能,我们需要首先安装SQLAlchemy库并设置好环境。以下是如何用Python和SQLAlchemy实现这个目标的一个示例:
```python
from sqlalchemy import create_engine, text
from sqlalchemy.orm import sessionmaker
class ShMySQLORM:
def __init__(self):
# 加载配置文件中的连接信息
with open('./shmysql.json','r', encoding='utf8') as fp:
config = json.load(fp)
# 创建数据库引擎
db_url = f"mysql+pymysql://{config['user']}:{config['password']}@{config['host']}/{config['database']}?charset=utf8mb4"
self.engine = create_engine(db_url)
# 开始一个session会话
Session = sessionmaker(bind=self.engine)
self.session = Session()
def execute_sql(self, sql_str):
# 使用session执行SQL语句
self.session.execute(text(sql_str))
self.session.commit()
def __enter__(self):
return self
def __exit__(self, exc_type, exc_val, exc_tb):
# 提交事务并关闭会话
self.session.commit()
self.session.close()
```
在这个版本中,我们定义了一个新的类`ShMySQLORM`,它使用了SQLAlchemy的Session来进行数据库交互。注意,这里假设提供的SQL字符串是安全的;在实际应用中应小心处理以防止SQL注入攻击。此外,该示例简单地提交所有更改而不回滚任何异常,在更复杂的场景下可能需要调整这部分逻辑。
阅读全文