错误 [07002] [Microsoft][ODBC Microsoft Access Driver] 参数太少。执行 DELETE 时预期为 1

Posted

技术标签:

【中文标题】错误 [07002] [Microsoft][ODBC Microsoft Access Driver] 参数太少。执行 DELETE 时预期为 1【英文标题】:ERROR [07002] [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1 when doing DELETE 【发布时间】:2021-08-19 06:07:03 【问题描述】:

我有这个问题:

query_del = '''DELETE * FROM Students WHERE Students.[last_name] = "Q";'''

我这样做是为了执行:

conn= pyodbc.connect(r'Driver=Microsoft Access Driver (*.mdb, *.accdb);DBQ=C:\XXX\Database.accdb;')

curs = conn.cursor()
curs.execute(query_del)
curs.commit()

但是我收到了这个错误:

ERROR [07002] [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1

数据库当前是这样的:

ID last_name first_name 电子邮件地址

3 布欧 B C 4 Cuuuu C D 70 W W 72 W W 74 W W 76 W W 78 W W 80 W W 82 W W 84 W W 86 W W 87问问 88 W W 89问问 90 瓦特

编辑 1: 这种方式的查询有效:

query_del = '''DELETE * FROM Students WHERE Students.[last_name] = 'Q';'''

但我确实需要在变量中使用双引号,因为我有一些姓氏,例如x'xxx'x,所以我不知道如何删除它们。带有简单双引号的查询在 Access 中运行良好:

DELETE FROM Students WHERE Students.[last_name] = "W"; #Works in Access
DELETE FROM Students WHERE Students.[last_name] = 'W'; #Also Works in Access

如何将其翻译成 python 和 pyodbc?

【问题讨论】:

关于包含撇号的文本值的问题,请切换到parameter query 【参考方案1】:

考虑:query_del = "DELETE FROM Students WHERE [last_name] = 'Q'"

注意引号和撇号分隔符的交换。字段的 * 通配符不是必需的,但不应该造成伤害。

如果使用撇号对值进行硬编码,则将撇号加倍,以便将其转义并强制视为文字文本:='x''x'。如果通过引用表单上的控件来编码动态输入,则必须连接并使用 Replace 来处理数据中撇号的可能性:

query_del = "DELETE FROM Students WHERE [last_name] = '" & Replace(Me.tbxName, "'", "''") & "'"

或者使用参数-查看How do I use SQL parameters with python?

变量集是query_del,但执行引用query所以试试:curs.execute(query_del)

【讨论】:

之所以有效,当然是因为 ODBC 驱动程序默认启用了 ANSI 引号,因此将 "Q" 解释为字段名称,而不是文本字符串 如果我想删除一个姓氏:x'xxx 怎么办?我不能用'x'xxx'来做,我需要像“x'xxx”那样做

以上是关于错误 [07002] [Microsoft][ODBC Microsoft Access Driver] 参数太少。执行 DELETE 时预期为 1的主要内容,如果未能解决你的问题,请参考以下文章

RODBC 与 ms-access 错误 07002 17 [Microsoft][ODBC Microsoft Access Driver]COUNT 字段不正确

pyodbc.Error: ('07002', '[07002] [Microsoft][ODBC Microsoft Access Driver] 参数太少。预期为 9. (-3010) (SQLE

COUNT 字段不正确或语法错误 (0) (SQLExecDirectW)')

访问字段名称包含变音符号时出现pyodbc错误

PHP 内部的 COUNT 字段不正确或语法错误

尝试连接到 R 中的 Microsoft Access 数据库的“参数太少”