避免在只读 Sybase 连接上出现 BEGIN TRANSACTION 错误
Avoiding a BEGIN TRANSACTION error on a read-only Sybase connection
我想使用 python 与只读数据库建立 32 位 odbc 连接。
我已经安装
C:\py_comp>c:\Python27\Scripts\pip.exe install pyodbc
Collecting pyodbc
Downloading pyodbc-4.0.19-cp27-cp27m-win32.whl (50kB)
100% |################################| 51kB 1.1MB/s
Installing collected packages: pyodbc
Successfully installed pyodbc-4.0.19
并打开了一个只读连接
conn = pyodbc.connect(r'uid=xxxx;pwd=xxxx;DRIVER={Adaptive Server Enterprise};port=1234;server=11.222.333.444;CHARSET=iso_1;db=my_db;readonly=True')
以上所有都工作正常但是当我尝试做一个 select
cursor.execute("SELECT something FROM atable")
我收到一个错误,因为它发出 begin transaction
但它不应该那样做。
pyodbc.Error: ('ZZZZZ', u"[ZZZZZ] [Sybase][ODBC Driver][Adaptive Server Enterprise]Attempt to BEGIN TRANSACTION in database 'my_db' failed because database is READ ONLY.\n (3906) (SQLExecDirectW)")
Python 的 DB API 2.0 指定,默认情况下,应在 "autocommit" 关闭的情况下打开连接,以便在必须显式提交的事务中执行对数据库的操作(或回滚)。这可能导致 BEGIN TRANSACTION
在每批 Cursor#execute
调用之前被发送到数据库,并且可能导致无法在事务内执行的操作出现问题(例如,某些 DDL 语句)。
pyodbc 允许我们在连接上启用 "autocommit",方法是将其作为参数添加到 connect
调用
cnxn = pyodbc.connect(conn_str, autocommit=True)
或在建立连接后启用它
cnxn = pyodbc.connect(conn_str)
cnxn.autocommit = True
这可以通过在执行 SQL 命令之前抑制自动 BEGIN TRANSACTION
来避免此类问题。
我想使用 python 与只读数据库建立 32 位 odbc 连接。 我已经安装
C:\py_comp>c:\Python27\Scripts\pip.exe install pyodbc
Collecting pyodbc
Downloading pyodbc-4.0.19-cp27-cp27m-win32.whl (50kB)
100% |################################| 51kB 1.1MB/s
Installing collected packages: pyodbc
Successfully installed pyodbc-4.0.19
并打开了一个只读连接
conn = pyodbc.connect(r'uid=xxxx;pwd=xxxx;DRIVER={Adaptive Server Enterprise};port=1234;server=11.222.333.444;CHARSET=iso_1;db=my_db;readonly=True')
以上所有都工作正常但是当我尝试做一个 select
cursor.execute("SELECT something FROM atable")
我收到一个错误,因为它发出 begin transaction
但它不应该那样做。
pyodbc.Error: ('ZZZZZ', u"[ZZZZZ] [Sybase][ODBC Driver][Adaptive Server Enterprise]Attempt to BEGIN TRANSACTION in database 'my_db' failed because database is READ ONLY.\n (3906) (SQLExecDirectW)")
Python 的 DB API 2.0 指定,默认情况下,应在 "autocommit" 关闭的情况下打开连接,以便在必须显式提交的事务中执行对数据库的操作(或回滚)。这可能导致 BEGIN TRANSACTION
在每批 Cursor#execute
调用之前被发送到数据库,并且可能导致无法在事务内执行的操作出现问题(例如,某些 DDL 语句)。
pyodbc 允许我们在连接上启用 "autocommit",方法是将其作为参数添加到 connect
调用
cnxn = pyodbc.connect(conn_str, autocommit=True)
或在建立连接后启用它
cnxn = pyodbc.connect(conn_str)
cnxn.autocommit = True
这可以通过在执行 SQL 命令之前抑制自动 BEGIN TRANSACTION
来避免此类问题。