当我尝试使用pyodbc和freetds从Linux主机备份MSSQL数据库时,我目前遇到了一些问题。版本如下:
Python 2.7.6,pyodbc 3.0.7,freetds 0.91-2,Centos 6.5
我运行的代码如下(删除了名称和密码等):
import pyodbc
conn = pyodbc.connect('DRIVER=FreeTDS;SERVER=<servername>;PORT=<port>;DATABASE=<database>;UID=<user>;PWD=<password>;TDS_Version=8.0;Autocommit=True;')
sql = "exec dbo.backupStashDB"
cursor=conn.cursor().execute(sql)
while cursor.nextset():
pass
conn.close()
我得到的错误信息是:
exec dbo.backupnameDB
Traceback (most recent call last):
File "soph_stash_db_bkp.py", line 6, in <module>
conn.execute(sql)
pyodbc.ProgrammingError: ('42000', '[42000] [FreeTDS][SQL Server]Cannot perform a backup or restore operation within a transaction. (3021) (SQLExecDirectW)')
无论我是否手动执行命令,我都会收到相同的消息。或者通过此代码示例中的存储过程。
我做了一些谷歌搜索并发现添加&#39; Autocommit = True&#39;会解决这个问题,但这似乎没有任何区别。
有没有人有任何有用的见解可以分享这个?
提前谢谢,迈克
答案 0 :(得分:3)
autocommit
指定为pyodbc.connect函数的关键字参数,它不是ODBC连接字符串的一部分。请参阅以:
&#34; 某些关键字由pyodbc使用,不会传递给odbc驱动程序...... &#34;
将您的代码修改为以下内容:
...
conn = pyodbc.connect('DRIVER=FreeTDS;SERVER=<servername>;PORT=<port>;DATABASE=<database>;UID=<user>;PWD=<password>;TDS_Version=8.0;',
autocommit=True)
...