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

Python操作MySQL遇SQL语法错误,语句在Workbench可正常执行

问题分析与解决办法

问题根源

错误提示显示SQL语句被额外双引号包裹,说明传递给cursor.execute()的SQL字符串实际是"SELECT * from Librarian.Documents WHERE Doc_Id = 3;"(带首尾双引号),MySQL无法识别这种带引号的完整语句,因此触发1064语法错误。

解决步骤

  • 检查SQL模板配置:查看dbcfg.sql['getDocDetails']对应的原始SQL模板,确认是否被双引号包裹。比如配置文件中如果写成:
    "SELECT * from Librarian.Documents WHERE Doc_Id = {_id};"
    
    需去掉首尾双引号,改为:
    SELECT * from Librarian.Documents WHERE Doc_Id = {_id};
    
  • 验证实际生成的SQL:在执行cursor.execute(sql)前添加调试代码,打印SQL的原始字符串(用repr()可显示隐藏的引号):
    print(repr(sql))  # 若输出为'"SELECT ...;"'则说明字符串带双引号
    
  • 临时修复(不推荐长期使用):如果暂时无法修改配置,可在替换后去除首尾双引号:
    sql = dbcfg.sql['getDocDetails'].replace('{_id}', str(doc_id)).strip('"')
    

后续优化(推荐)

尽快切换到参数化查询,彻底避免字符串插值带来的语法问题和SQL注入风险,示例代码:

sql = "SELECT * from Librarian.Documents WHERE Doc_Id = %s;"
self.cursor.execute(sql, (doc_id,))

内容的提问来源于stack exchange,提问作者R S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 05:45:33