慎用sqlalchemy的ORM自动映射

博主在开发一个企业内部系统时候,为了图方便,直接使用sqlalchemy的自动映射功能:

def __init__(self) -> None:
# 创建引擎
self.engine = create_engine(self.DB_CONNECT_STRING, echo=True)
# 自动映射
self.Base = automap_base()
self.Base.prepare(self.engine,reflect=True)
# 获取所有表的映射类
self.tables = self.Base.classes.keys()

结果后面无意中发现,被映射的系统的mysql,在修改数据的时候,会出现mysql卡住的现象。

而且查询数据的时候,很大概率还会导致数据库连接失败。同时自动映射初始化的时候,表多的话,也很慢。

最后,改成了sqlalchemy直接使用原生sql方式来完成相关工作,整个一下就轻松了。

特此记录一下。

sql = text(“””SELECT u.user_name, c.*
FROM modeling_comment_86 c
JOIN user_basic_info u ON c.user_id = u.user_id
WHERE c.data_id IN :issue_ids
ORDER BY comment_id DESC”””).bindparams(issue_ids=issue_ids)

issue_comment_query = session.execute(sql)

for comment_item in issue_comment_query:
print(“comment_item:”, comment_item)
issue_item = {
“comment_id”: comment_item.comment_id,
“data_id”: comment_item.data_id,
“parent_id”: comment_item.parent_id,
“blockquote”: comment_item.blockquote,
“content”: comment_item.content,
“user_id”: comment_item.user_id,
“user_name”: comment_item.user_name,
“created_at”: str(comment_item.created_at),
}
comment_list.append(issue_item)

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注