首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用pyodbc和MS访问错误07002的SQL语句

使用pyodbc和MS访问错误07002的SQL语句
EN

Stack Overflow用户
提问于 2020-11-09 20:16:15
回答 1查看 152关注 0票数 1

这个错误使我迷失了方向。

代码语言:javascript
运行
复制
pyodbc.Error: ('07002', '[07002] [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1. (-3010) (SQLExecDirectW)')

使用下面的代码会出现错误。

代码语言:javascript
运行
复制
conn = pyodbc.connect(r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};UID=admin;UserCommitSync=Yes;Threads=3;SafeTransactions=0;PageTimeout=5;MaxScanRows=8;MaxBufferSize=2048;{FIL=MS Access};DriverId=25;DefaultDir=C:\Users\James\Documents;DBQ=C:\Users\James\Documents\Database1.accdb;')
cursor = conn.cursor()

      cursor.execute("""INSERT INTO Loan_vehicle_data (Loan_make , Loan_model , Loan_rego) values (test , 
   test , test)""")

我尝试过INSERT语句的不同变体,但仍然无法工作。有人能帮我澄清一下写INSERT语句的正确方法吗?我已经读到您需要使用cursor.commit(),但是在这个库中似乎并不明显,所以我假设这是多余的?我还读到,在语句的开头和结尾都需要三重""",但根据我在docs https://github.com/mkleehammer/pyodbc/wiki/Cursor中所读到的内容,似乎并非如此?

这是完整的回溯图。

代码语言:javascript
运行
复制
Exception in Tkinter callback

    Traceback (most recent call last):
      File "C:\Program Files\Python39\lib\tkinter\__init__.py", line 1885, in __call__
        return self.func(*args)
      File "<ipython-input-90-00d386f93670>", line 92, in add_new_loancar_to_DB
        cursor.execute("""INSERT INTO [Loan_vehicle_data](Loan_make , Loan_model , Loan_rego) values (test , test , test)""")
    pyodbc.Error: ('07002', '[07002] [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1. (-3010) (SQLExecDirectW)')
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-09 22:51:30

如果你提交

代码语言:javascript
运行
复制
INSERT INTO Loan_vehicle_data (Loan_make , Loan_model , Loan_rego) values (test , test , test)

并且test不包含在单引号中,它被解释为列名。当Access SQL遇到一个它无法识别的列名(或类似的)时,它假设它是一个参数占位符。因此得出的结论是,查询中有一个名为test的参数,但没有提供任何参数值。如果您使用

代码语言:javascript
运行
复制
INSERT INTO Loan_vehicle_data (Loan_make , Loan_model , Loan_rego) values ('test' , 'test' , 'test')

你也可以这样做:

代码语言:javascript
运行
复制
text_to_insert = "test"
sql = "INSERT INTO Loan_vehicle_data (Loan_make , Loan_model , Loan_rego) VALUES (?, ?, ?)"
cursor.execute(sql, text_to_insert, text_to_insert, text_to_insert)

(是的,您需要重复参数值三次,因为pyodbc只支持位置参数而不是命名参数。)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64758652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档