Python MySQL Connector中查询符号>被转义为>触发1064语法错误
问题场景与异常现象
基于MySQL Connector开发数据库连接API时,编写带关系判断逻辑的查询语句出现执行异常:
- 当查询字符串中写入
>符号,将构造好的查询字符串作为待执行指令传入数据库时,原本的>在最终执行的SQL中被错误转义为$gt;、>类的HTML实体形式 - MySQL无法识别这类转义符号,直接抛出语法错误中断执行
完整报错信息:
mysql.connector.errors.ProgrammingError: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'GHI_DATA.time_stamp >= 2019-5-10' at line 1 // Werkzeug Debugger
问题根因
这类转义并非MySQL Connector本身的默认行为,转义逻辑来自开发链路的前置环节:
Werkzeug作为开发调试服务器,在对前端传入的查询条件做参数解析、调试页面字符串渲染时,会默认将<、>这类特殊字符转义为<、>的HTML实体格式,没有对数据库查询场景的字符串做转义豁免,直接把带转义符的字符串透传给MySQL Connector执行,最终触发MySQL语法识别错误。
可落地的解决方法
- 梳理查询字符串的全链路传递逻辑,在将字符串传给MySQL Connector执行前,对被错误转义的内容做反向实体解码,把
>、<还原为原生的>、<符号后再传入执行 - 放弃直接拼接前端原生参数构造SQL的写法,改用MySQL Connector内置的参数化查询接口传递筛选条件值,避免特殊字符在多层字符串传递过程中被中间层错误转义
- 排查时优先打印实际传给数据库的原生SQL内容,不要把Werkzeug调试页面中展示的转义后文本,直接等同于实际执行的SQL
内容的提问来源于stack exchange,提问作者Nandha
相关产品推荐
相关产品推荐

