SQL 使用 pyodbc 和 MS Access 插入语句错误 07002

SQL insert statement using pyodbc and MS Access ERROR 07002

我迷失了这个错误。

pyodbc.Error: ('07002', '[07002] [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1. (-3010) (SQLExecDirectW)')

使用下面的代码会报错。

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() 但这在这个库中似乎并不明显所以我假设这是多余的?我还读到在语句的开头和结尾需要三重 """,但根据我在文档中读到的 https://github.com/mkleehammer/pyodbc/wiki/Cursor 似乎不是这样?

这是完整的回溯..

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)')

如果你提交

INSERT INTO Loan_vehicle_data (Loan_make , Loan_model , Loan_rego) values (test , test , test)

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

,您的查询将按预期工作
INSERT INTO Loan_vehicle_data (Loan_make , Loan_model , Loan_rego) values ('test' , 'test' , 'test')

您也可以这样做:

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 仅支持位置参数,不支持命名参数。)