PyODBC 返回错误,但为什么?

4 投票
2 回答
10341 浏览
提问于 2025-04-17 14:01

我尝试在两种情况下执行 T-SQL 查询(我使用的是 Win7、Python 3.2、MS SQL Server Express 2008,以及适用于 Python 3.2 的 pyodbc):

-情况 1:

我在 MS SQL Server Management Studio 中尝试执行查询:

USE master;CREATE DATABASE Sales ON (NAME = Sales_dat,FILENAME = 'C:\saledat.mdf',        SIZE = 10,    MAXSIZE = 50,    FILEGROWTH = 5 ) LOG ON ( NAME = Sales_log,    FILENAME = 'C:\salelog.ldf',    SIZE = 5MB,    MAXSIZE = 25MB, FILEGROWTH = 5MB );

结果返回成功。

-情况 2:

import pyodbc
cxnn=pyodbc.connect('DSN=SERVER;UID=sa;PWD=password')
cur=cxnn.cursor()
cur.execute("USE master;CREATE DATABASE Sales ON (NAME = Sales_dat,FILENAME = 'C:\saledat.mdf',    SIZE = 10,    MAXSIZE = 50,    FILEGROWTH = 5 ) LOG ON ( NAME = Sales_log,    FILENAME = 'C:\salelog.ldf',    SIZE = 5MB,    MAXSIZE = 25MB, FILEGROWTH = 5MB );")
cxnn.commit()

但是在运行代码后,我收到了错误信息。

 pyodbc.Error: ('HY000', 'The driver did not supply an error!')

如果我在没有

cxnn.commit()

的情况下运行代码,就没有错误了。可是为什么会这样呢?

2 个回答

0

在我的情况下,我只需要升级一下pyodbc这个库,它就能正常工作了。

pip install --upgrade pyodbc
3

我不太明白为什么,把自动提交设置为“真”似乎能解决这个问题。请注意,反斜杠还是需要转义的。

自动提交可以通过两种方式来设置:

cxnn=pyodbc.connect('DSN=SERVER;UID=sa;PWD=password', autocommit=True)

或者:

cxnn=pyodbc.connect('DSN=SERVER;UID=sa;PWD=password')
cxnn.autocommit = True

完成这些后,创建游标并执行查询应该就能正常运行了:

cur=cxnn.cursor()
cur.execute("USE master;CREATE DATABASE Sales ON (NAME=Sales_dat, FILENAME='C:\\saledat.mdf', SIZE=10, MAXSIZE=50, FILEGROWTH=5) LOG ON (NAME=Sales_log, FILENAME='C:\\salelog.ldf', SIZE=5MB, MAXSIZE=25MB, FILEGROWTH=5MB );")

撰写回答