当我尝试使用 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)')
无论我是“手动”运行命令还是通过存储过程运行命令(如本代码示例中所示),我都会收到相同的消息。
我进行了一些谷歌搜索,发现对添加“Autocommit=True”的引用可以解决此问题,但这似乎根本没有任何区别。
有人对此有任何有用的见解可以分享吗?
提前致谢,迈克
autocommit
应指定为 pyodbc.connect 的关键字参数函数,它不是 ODBC 连接字符串的一部分。请参阅以以下内容开头的部分:
“一些关键字被 pyodbc 使用,没有传递给 odbc 驱动程序......”
将您的代码修改为以下内容:
...
conn = pyodbc.connect('DRIVER=FreeTDS;SERVER=<servername>;PORT=<port>;DATABASE=<database>;UID=<user>;PWD=<password>;TDS_Version=8.0;',
autocommit=True)
...
我是一名优秀的程序员,十分优秀!