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

Python实现带转义字符的MySQL插入查询(Access数据迁移场景)

问题根源

你当前的函数出现字段忽略问题,不是转义规则的问题,是代码本身存在3处明显错误:

  • 处理带单引号的字段时,你初始化string = "",没有把当前字段值dict[key]赋值给string,循环空字符串自然生成不了有效值
  • 处理完转义后,你给vl赋值时直接用了=而不是+=,会覆盖之前已经拼接好的其他字段值
  • 使用Python内置关键字dict作为参数名,容易引发命名冲突

单引号转义规则

MySQL中单引号转义有两种合法写法:

  1. 转成两个连续单引号''(兼容性最好,不受SQL模式影响,更推荐)
  2. 转成反斜杠加单引号\'(需要确保MySQL没有开启NO_BACKSLASH_ESCAPES模式)

以D'Amelio为例,转义后应该写成'D''Amelio',生成的SQL可以直接在MySQL中执行。

优化后的函数代码

def dictionary_output(data):
    # 初始化主键id的字段和值
    fields = ["id"]
    values = [f"'{id_gen()}'"]
    for key, val in data.items():
        val_str = str(val)
        # 跳过空值和None
        if val_str in ('None', ''):
            continue
        fields.append(str(key))
        # 单引号转义,直接用replace方法比手动遍历更高效
        escaped_val = val_str.replace("'", "''")
        values.append(f"'{escaped_val}'")
    # 拼接SQL语句,避免手动处理末尾逗号的问题
    fields_part = f"({', '.join(fields)})"
    values_part = f"({', '.join(values)})"
    return f"INSERT into lefm_customers {fields_part} values {values_part};"

额外建议

如果你的迁移脚本是在生产环境使用,或者涉及不可信的输入数据,不要手动拼接SQL语句,改用MySQL Python驱动自带的参数化查询功能,能完全避免SQL注入风险,也不需要自己处理转义逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:06:04