Python 使用pyodbc和MS Access的SQL insert语句错误07002
我被这个错误迷住了Python 使用pyodbc和MS Access的SQL insert语句错误07002,python,pyodbc,Python,Pyodbc,我被这个错误迷住了 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;UserComm
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()
,但这在这个库中似乎并不明显,所以我假设这是多余的?我还读到,您需要在语句的开头和结尾使用三个“
”,但根据我在文档中读到的内容,似乎不是这样
这是完整的回溯
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)')
Tkinter回调中出现异常
回溯(最近一次呼叫最后一次):
文件“C:\Program Files\Python39\lib\tkinter\\ uuuuu init\uuuuu.py”,第1885行,在调用中__
返回self.func(*args)
文件“”,第92行,在添加新的\u loancar\u到\u DB中
cursor.execute(““”插入[贷款车辆数据](贷款品牌、贷款模型、贷款注册)值(测试、测试、测试)”)
pyodbc。错误:('07002','[07002][Microsoft][ODBC Microsoft Access驱动程序]参数太少。应为1。(-3010)(SQLExecDirectW))
如果您提交
插入贷款车辆数据(贷款品牌、贷款型号、贷款注册)值(测试、测试、测试)
并且test
不包含在单引号中,它被解释为列名。当Access SQL遇到列名(或类似名称)时如果它无法识别,则假定它是一个参数占位符。因此得出的结论是,您的查询中有一个名为test
的参数,但您没有提供任何参数值。如果使用
插入贷款车辆数据(贷款品牌、贷款型号、贷款注册)值(“测试”、“测试”、“测试”)
您也可以这样做:
text\u to\u insert=“测试”
sql=“插入贷款车辆数据(贷款品牌、贷款模型、贷款注册)值(?,?)”
执行(sql、文本到插入、文本到插入、文本到插入)
(是的,您需要将参数值重复三次,因为pyodbc只支持位置-未命名-参数。)是否尝试将字符串值
“test”
插入三列中的每一列?@GordThompson正确:)