错误:"无法在事务中执行备份或还原操作。"尝试使用pyodbc和freetds备份MSSQL数据库时

时间:2014-08-06 18:45:50

标签: python sql-server pyodbc freetds

当我尝试使用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;会解决这个问题,但这似乎没有任何区别。

有没有人有任何有用的见解可以分享这个?

提前谢谢,迈克

1 个答案:

答案 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)
...