2015-08-15 34 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掛起的原因不是因爲調用引擎上的執行或會話之間的差異,而是因爲在表上調用了刪除而沒有提交,然後進行後續讀取。