![](/img/trans.png)
[英]pandas/sqlalchemy/pyodbc: Result object does not return rows from stored proc when UPDATE statement appears before SELECT
[英]stored proc not committing with sqlalchemy/pyodbc
我正在使用 sqlalchemy/pyodbc 連接到 MS SQL 2012 服務器。 我之所以選擇 sqlalchemy,是因為它使用.read_sql
和.to_sql
與.to_sql
數據幀直接集成。
在高層次上,我的代碼是:
df = dataframe.read_sql("EXEC sp_getsomedata")
<do some stuff here>
finaldf.to_sql("loader_table", engine,...)
這部分很好用,很容易閱讀等等。問題是我必須運行一個最終存儲過程來將加載器表中的數據插入到實時表中。 通常,sqlalchemy 知道在 INSERT/UPDATE/DELETE 之后提交,但是當我運行這個最終存儲過程時不想為我做提交。
在嘗試了多種方法后,我看到 db 中的事務未提交。 我知道 sqlalchemy 非常靈活,我使用了它大約 3% 的功能,最簡單的方法是什么? 我想我需要使用 sqlalchemy 核心而不是 ORM。 我看到了使用 sessionmaker 的例子,但我認為它壟斷了引擎對象並且不允許熊貓訪問它。
connection = engine.connect()
transaction = connection.begin()
connection.execute("EXEC sp_doLoaderStuff")
transaction.commit()
connection.close()
我曾嘗試從連接級別、游標級別甚至使用.raw_connection()
方法調用.execute
,但沒有成功。
connection = engine.raw_connection()
connection.autocommit = True
cursor = connection.cursor()
cursor.execute("EXEC sp_doLoaderStuff")
connection.commit()
connection.close()
任何想法我在這里缺少什么?
完全自作自受。 使用正常工作的 raw_connection() 方法的正確工作代碼是:
connection = engine.raw_connection()
cursor = connection.cursor()
cursor.execute("EXEC sp_doLoaderStuff")
connection.commit()
connection.close()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.