You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python查询Access数据库SQL Where子句传字符串变量报错

MS Access Python参数化查询LIKE语法报错排查

两种错误写法的问题点

  • 第一种%s占位符写法报错核心原因:
    Python连接MS Access常用的pyodbc、pypyodbc库走ODBC接口,Access ODBC不认%s这种占位符,必须用?作为参数占位符。
  • 第二种format拼接写法报错核心原因:
    直接格式化字符串没有给传入的字符串值加单引号,最终拼出来的SQL是SELECT * FROM table1 WHERE table1.Itemname LIKE XYZ,数据库会把XYZ当成列名而不是字符串常量,直接触发语法错误。而且这种拼接写法有SQL注入风险,任何场景都不推荐用。

正确可运行写法

用Access兼容的?占位符做参数化查询即可,不需要手动加引号,驱动会自动处理字符串转义和包裹:

Itemname = "XYZ"
# 占位符统一用?
query = "SELECT * FROM table1 WHERE table1.Itemname LIKE ?"
# 精确匹配XYZ直接传值即可
cursor2.execute(query, (Itemname,))

如果需要做模糊匹配(比如找所有Itemname包含XYZ的记录),直接在传参的时候拼接通配符就行,Access走ODBC连接时用标准SQL通配符%匹配任意长度字符、_匹配单个字符:

# 匹配包含XYZ的记录
cursor2.execute(query, (f"%{Itemname}%",))
# 匹配以XYZ开头的记录
# cursor2.execute(query, (f"{Itemname}%",))

补充:如果是完全匹配某个字符串,用=运算符比LIKE查询效率更高,语句可以写成SELECT * FROM table1 WHERE table1.Itemname = ?,传参方式不变。

内容的提问来源于stack exchange,提问作者Ronak Patel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 22:54:28