0

我有这个查询:

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 姓氏 名字 电子邮件地址

3 Buuuu BC
4 Cuuuu CD
70 WW
72 WW
74 WW
76 WW
78 WW
80 WW
82 WW
84 WW
86 WW
87 QQ
88 WW
89 QQ
90 WW

编辑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?

4

1 回答 1

1

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

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

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

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

或者使用参数 - 查看如何在 python 中使用 SQL 参数?

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

于 2021-08-19T08:16:23.770 回答