我尝试在两种情况下执行T-SQL查询(我使用Win7,python 3.2,MS SQL Server express 2008,pyodbc for python 3.2):
-case 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 );
返回成功结果
-case 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()
我没有收到任何错误。但为什么呢?
答案 0 :(得分:3)
由于我不太明白的原因,将autocommit设置为true似乎解决了这个问题。请注意,仍然需要转义反斜杠。
自动提交可以通过两种方式设置:
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 );")
答案 1 :(得分:0)
在我的情况下,我只需要升级pyodbc就可以了。
pip install --upgrade pyodbc