Python 2.7 避免只读Sybase连接上的BEGIN事务错误
我想使用python实现到只读数据库的32位odbc连接。 我已经安装了Python 2.7 避免只读Sybase连接上的BEGIN事务错误,python-2.7,sybase,pyodbc,Python 2.7,Sybase,Pyodbc,我想使用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 pack
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')
所有这些都很好,但是当我试着做一个选择的时候
cursor.execute("SELECT something FROM atable")
我得到一个错误,因为它发出了一个开始事务
,但它不应该这样做
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指定,默认情况下,应在关闭“自动提交”的情况下打开连接,以便在必须显式提交(或回滚)的事务中执行对数据库的操作。这可能导致在每批游标#execute
调用之前将开始事务
发送到数据库,并可能导致无法在事务中执行的操作出现问题(例如,一些DDL语句)
pyodbc允许我们在连接上启用“自动提交”,方法是将其作为参数添加到connect
调用中
cnxn=pyodbc.connect(conn_str,autocommit=True)
或者在建立连接后启用它
cnxn=pyodbc.connect(连接)
cnxn.autocommit=True
这可以通过在执行SQL命令之前抑制自动开始事务来避免此类问题。Python指定,默认情况下,应在关闭“自动提交”的情况下打开连接,以便在必须显式提交(或回滚)的事务中执行数据库操作。这可能导致在每批游标#execute
调用之前将开始事务
发送到数据库,并可能导致无法在事务中执行的操作出现问题(例如,一些DDL语句)
pyodbc允许我们在连接上启用“自动提交”,方法是将其作为参数添加到connect
调用中
cnxn=pyodbc.connect(conn_str,autocommit=True)
或者在建立连接后启用它
cnxn=pyodbc.connect(连接)
cnxn.autocommit=True
这可以通过在执行SQL命令之前抑制自动BEGIN TRANSACTION
来避免此类问题。您可以在打开连接后立即尝试conn.autocommit=True
。@GordThompson我很乐意接受它作为答案。您可以在打开连接后立即尝试conn.autocommit=True
连接。@GordThompson我很乐意接受它作为答案