2015-11-14 50 views
1

我使用pyodbc並執行存儲過程從Python 3.4連接到sybase ASE 15數據庫。pyodbc autocommit似乎不適用於sybase和sqlalchemy

所有作品,如果我使用本機pyodbc預期:

import pd 
import pyodbc 

con = pyodbc.connect('DSN=dsn_name;UID=username;PWD=password', autocommit=True) 
df = pd.read_sql("exec p_procecure @GroupName='GROUP'", con) 

[驅動程序爲Adaptive Server Enterprise中。

我必須自動提交=真,如果我沒有做,我得到了以下錯誤:

DatabaseError: Execution failed on sql 'exec ....': ('ZZZZZ', "[ZZZZZ] [SAP][ASE ODBC Driver][Adaptive Server Enterprise]Stored procedure 'p_procedure' may be run only in unchained transaction mode. The 'SET CHAINED OFF' command will cause the current session to use unchained transaction mode.\n (7713) (SQLExecDirectW)")

我嘗試使用SQLAlchemy的(1.0.9)來實現相同的:

from sqlalchemy import create_engine, engine 
from sqlalchemy.orm import sessionmaker 
from sqlalchemy.sql import text 

url = r'sybase+pyodbc://username:[email protected]' 
engine = create_engine(url, echo=True) 
sess = sessionmaker(bind=engine).Session() 

df = pd.read_sql(text("exec p_procedure @GroupName='GROUP'"),conn.execution_options(autocommit=True)) 

儘管事實上我已指定autocommit = True,但錯誤消息是相同的。 (我也在會議級測試了這一點,但不應該是必要的,也沒有區別)。

DBAPIError: (pyodbc.Error) ('ZZZZZ', "[ZZZZZ] [SAP][ASE ODBC Driver][Adaptive Server Enterprise]....

你能在這裏看到什麼不對嗎?

一如既往,任何幫助將不勝感激。

回答

0

傳遞自動提交= True參數作爲connect_args參數字典項不工作:

connect_args = {'autocommit': True} 
create_engine(url, connect_args=connect_args) 

connect_args – a dictionary of options which will be passed directly to the DBAPI’s connect() method as additional keyword arguments.

相關問題