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

使用Python向MySQL插入字符串时反斜杠丢失问题

解决插入MySQL时反斜杠被移除的问题

问题根源

  1. Python字符串转义干扰:你定义的filename="D:\myfiles\log files\2022-12-05 11-33-31.dat"中,反斜杠会被Python当作转义符处理,哪怕部分反斜杠没有对应合法转义序列,后续拼接SQL时也会出现异常。
  2. SQL拼接的转义漏洞:用str.format()直接拼接SQL语句,会让MySQL把反斜杠识别为SQL转义符,最终存储时被移除,同时还存在严重的SQL注入风险。

正确解决方案

1. 用原始字符串定义路径

在字符串前加r前缀,让Python跳过转义字符解析,完整保留路径里的反斜杠:

filename = r"D:\myfiles\log files\2022-12-05 11-33-31.dat"

2. 使用参数化查询(关键)

永远不要手动拼接SQL参数,让MySQL驱动自动处理转义逻辑,这是最安全可靠的方式:

# MySQLdb/PyMySQL等驱动用%s作为占位符
sql = "INSERT INTO df_log (log_file_name, file_hash) VALUES (%s, %s);"
# 将参数以元组形式传入execute方法
cursor.execute(sql, (log_file_name, file_hash))
conn.commit()

注:不同MySQL驱动的占位符可能有差异(比如mysql-connector-python同样用%s,SQLite用?),但参数化查询的逻辑一致——绝对避免手动把参数拼进SQL语句。

为什么双反斜杠没生效?

如果你用filename="D:\\myfiles\\log files\\..."后仍用str.format()拼接SQL,MySQL会先把\\解析为单个\,插入时又会把\当作SQL转义符吃掉,最终还是丢失反斜杠。只有参数化查询能让驱动正确处理所有转义,确保原始字符串完整存入数据库。

内容的提问来源于stack exchange,提问作者Hein du Plessis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 09:14:57