【发布时间】:2015-11-08 07:49:28
【问题描述】:
在 SQLAlchemy engine 和 session 上执行原始 SQL 有什么区别?专门针对 MSSQL 数据库。
engine.execute('DELETE FROM MyTable WHERE MyId IN(1, 2, 3)')
对
session.execute('DELETE FROM MyTable WHERE MyId IN(1, 2, 3)')
我注意到在会话上执行 SQL 会导致 MSSQL 'hang'。
也许有人知道这两次处决有何不同,或者也许有人可以指出我在哪里进一步调查。
【问题讨论】:
-
您可以在您的
create_engine呼叫上设置echo=True,每个查询都会被打印出来。检查两者之间有什么区别。 -
engine.execute(..)可能会创建一个新事务,而session.execute(..)使用会话的当前事务。我想差异可能与此有关。尝试根据@Dekel 的评论启用SQL日志记录以了解原因?或在session.execute之前执行session.commit()或session.rollback()来检验这个假设。
标签: python sql-server sqlalchemy