回答

收藏

PyODBC但是为什么呢?

技术问答 技术问答 41 人阅读 | 0 人回复 | 2023-09-13

我试着在两种情况下执行T-SQL查询(我用Win7,python 3.2,MS SQL Server Express 2008,适用于python
. b# ]. l# a" X6 d& H7 b3.2的pyodbc):( N7 R- H  e  K+ E. _- _" N6 l! M
-情况1:
  z) C2 b; D6 Y5 V2 F* B& v7 A使用MS SQL Server Management Studio,我试着执行查询:7 w6 \/ S* \) x. g
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 );返回成功结果' W4 N. g. R1 A! O- i
情况2:! i0 K$ N. a4 r
import pyodbccxnn=pyodbc.connect('DSN=SERVER;UID=saWD=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()但在运行代码后,我收到了错误的消息
8 W& ~' o+ J/ _( }$ \    pyodbc.Error: ('HY000','The driver did not supply an error!')假如我没有运行代码
$ O4 c& X8 H! c. q" O+ a9 _. Pcxnn.commit()但是为什么呢?) y' @) i( @3 P; e5 M9 r5 |1 X
                                                                ! Z1 h, Q, N# K5 Y- N# w
    解决方案:                                                                , e* h& z- W. K' Y& m9 t  z3 r
                                                                由于我不太了解的原因,将autocommit设置为true这个问题似乎可以解决。请注意,反斜杠仍需转换。9 x. F, E5 r6 V) {# J/ r% }
自动提交可以通过两种方式设置:: x! u4 K8 {- q! N: n
cxnn=pyodbc.connect('DSN=SERVER;UID=saWD=password',autocommit=True)或者:
+ v6 S% c3 i, L4 f% Z& [+ B4 Kcxnn=pyodbc.connect('DSN=SERVER;UID=saWD=password')cxnn.autocommit = True完成后,应按预期创建游标并执行查询:* U! Y$ f' _/ n: f4 ^0 p
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 );")
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则