【问题标题】:PyODBC return error, but why?PyODBC 返回错误,但为什么?
【发布时间】:2023-03-07 16:08:01
【问题描述】:

我尝试在两种情况下执行 T-SQL 查询(我使用 Win7、python 3.2、MS SQL Server express 2008、pyodbc for python 3.2):

-案例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()

我没有收到任何错误。但为什么呢?

【问题讨论】:

    标签: python sql sql-server-2008 pyodbc


    【解决方案1】:

    由于我不太明白的原因,将自动提交设置为 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 );")
    

    【讨论】:

    • 不,我尝试使用您的字符串(使用转义反斜杠),但再次收到错误 pyodbc.Error: ('HY000', '驱动程序未提供错误!')。如果我在没有 commit() 的情况下运行代码,一切都可以正常工作。但如果没有提交,我无法将更改保存到数据库
    • 您是否能够使用自动提交让此代码正常工作?
    • 是的,我确认,它适用于自动提交,谢谢。但为什么它只适用于自动提交?
    • 这是个好问题。也许值得询问 PyODBC 开发人员?
    【解决方案2】:

    就我而言,我只需要升级 pyodbc 即可。

    pip install --upgrade pyodbc
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-07-22
      • 1970-01-01
      • 2014-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多