【发布时间】:2016-02-16 06:39:48
【问题描述】:
我正在使用 pyodbc 从 Python 3.4 连接到 sybase ASE 15 数据库并执行存储过程。
如果我使用本机 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]。
我必须有 autocommit=True,如果没有,我会收到以下错误:
DatabaseError: sql 'exec ....' 执行失败: ('ZZZZZ', "[ZZZZZ] [SAP][ASE ODBC 驱动程序][Adaptive Server Enterprise]存储过程 'p_procedure' 只能在非链式事务模式下运行。 'SET CHAINED OFF' 命令将导致当前会话使用 unchained 事务模式。\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:password@dsn'
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 驱动程序][自适应服务器企业]....
你能看出这里有什么不对吗?
一如既往,我们将不胜感激。
【问题讨论】:
标签: python sqlalchemy sap-ase pyodbc