2015-08-15 55 views
1

在SQLAlchemy 引擎会话上执行原始SQL之间有什么区别?特别针对MSSQL数据库。在SQLAlchemy引擎上执行原始SQL与会话

engine.execute( 'DELETE FROM MyTable的WHERE MYID IN(1,2,3)')

session.execute('DELETE FROM MyTable的WHERE MYID IN (1,2,3) ')

我已经注意到,在执行上的会话的SQL,导致MSSQL为' ”。

也许有人对这两个执行方式有不同的看法,或者有人可以指点我在哪里进一步调查。

+0

您可以在'create_engine'调用中设置'echo = True',并且每个查询都将被打印出来。检查两者之间有什么区别。 – Dekel

+0

'engine.execute(..)'可能会创建一个新的事务,而'session.execute(..)'会使用会话的当前事务。我猜这种差异可能与此有关。尝试按照@ Dekel的评论启用'SQL'日志来理解为什么?或者在'session.execute'之前执行'session.commit()'或'session.rollback()'来测试这个假设。 – van

回答

0

MSSQL Server挂起的原因不是因为调用引擎上的执行或会话之间的差异,而是因为在表上调用了删除而没有提交,然后进行后续读取。