Python PYODBC 插入 - 参数太少



我已经多次讨论过这个问题,我已经为测试目的获取了数据库文件的副本,甚至重命名了该字段以匹配Python脚本。所以我在 Python 中使用的字段名称与表字段名称完全匹配。

import pyodbc
def main():
tble="SomeTable"
fld1="SomeField"
val1="TestValue"
sqlStrng = """INSERT INTO %s (%s) VALUES(%s);""" %(tble, fld1,val1)
contStrng = (
r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};'
r'DBQ=SomePathFile.accdb;'
)
cnnctn = pyodbc.connect(contStrng)
cursr = cnnct.cursor()
cursr.execute(sqlStrng)
cnnctn.commit()
cnnctn.close()

这不是拼写问题。我已经制作了 Access 文件的测试副本,并创建了一个名为 SomeTable 的表,其中包含一个名为 SomeField 的字段。我有正确的路径,我已经通过运行 SELECT SQL 脚本对此进行了验证,该脚本可以正常工作。

我尝试将 fld1 设置为参数,然后使用执行命令发送它,但后来我被告知我需要 0 个参数。当我删除它时,我被告知我需要 1。

我开始想也许是这个文件?相同的代码适用于我拥有的另一个文件。但是我创建了一个全新的文件,结果相同。我一定错过了什么。

如果您在分配它后立即print(sqlStrng),您将看到它的值为

INSERT INTO SomeTable (SomeField) VALUES(TestValue);

Access 数据库引擎将无法识别的名称视为参数,因此希望为名称TestValue提供参数值。如果要'TestValue'插入字符串值,则应使用 pyodbc 参数占位符 (?) 并将val1作为参数传递到.execute方法中,如下所示:

tble="SomeTable"
fld1="SomeField"
val1="TestValue"
sqlStrng = """INSERT INTO [%s] ([%s]) VALUES(?);""" %(tble, fld1)
contStrng = (
r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};'
r'DBQ=SomePathFile.accdb;'
)
cnnctn = pyodbc.connect(contStrng)
cursr = cnnct.cursor()
cursr.execute(sqlStrng, val1)

请注意,如果SomeField是数字字段并且您使用val1=123,则不会收到错误123因为它将被视为数字文本,而不是无法识别的名称(未引号的文本值)。

最新更新