pyodbc autocommit 似乎不适用于 sybase 和 sqlalchemy
pyodbc autocommit does not appear to work with sybase and sqlalchemy
我正在使用 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: 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: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
Driver][Adaptive Server Enterprise]....
你能看出这里有什么问题吗?
一如既往,我们将不胜感激。
将 autocommit=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.
我在使用 autocommit 选项时遇到了一些问题。唯一对我有用的是在建立连接后将此选项更改为 True。
ConnString = 'Driver=%SQL_DRIVER%;Server=%SQL_SERVER%;Uid=%SQL_LOGIN%;Pwd=%SQL_PASSWORD%;'
SQL_CONNECTION = pyodbc.connect(ConnString)
SQL_CONNECTION.autocommit = True
我正在使用 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: 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: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 Driver][Adaptive Server Enterprise]....
你能看出这里有什么问题吗?
一如既往,我们将不胜感激。
将 autocommit=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.
我在使用 autocommit 选项时遇到了一些问题。唯一对我有用的是在建立连接后将此选项更改为 True。
ConnString = 'Driver=%SQL_DRIVER%;Server=%SQL_SERVER%;Uid=%SQL_LOGIN%;Pwd=%SQL_PASSWORD%;'
SQL_CONNECTION = pyodbc.connect(ConnString)
SQL_CONNECTION.autocommit = True