Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 避免只读Sybase连接上的BEGIN事务错误_Python 2.7_Sybase_Pyodbc - Fatal编程技术网

Python 2.7 避免只读Sybase连接上的BEGIN事务错误

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

我想使用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')
所有这些都很好,但是当我试着做一个选择的时候

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我很乐意接受它作为答案