【问题标题】:Executing raw SQL on the SQLAlchemy engine versus a session在 SQLAlchemy 引擎上执行原始 SQL 与会话
【发布时间】: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


【解决方案1】:

MSSQL Server 挂起的原因,不是因为在引擎或会话上调用execute 的区别,而是因为在表上调用了删除,没有提交,然后是后续读取。

【讨论】:

    猜你喜欢
    • 2018-09-08
    • 1970-01-01
    • 2014-06-06
    • 2016-03-23
    • 2023-03-29
    • 2013-08-01
    • 1970-01-01
    • 2017-04-03
    • 2017-05-28
    相关资源
    最近更新 更多