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

Python mysql.connector插入JSON字符串的转义与语法错误问题

解决Python插入JSON到MariaDB的SQL语法错误问题

核心解决方案:用参数化查询替代字符串拼接

直接用字符串格式化拼接SQL是问题根源——JSON内容里的单引号会破坏SQL语句结构,手动转义既麻烦又容易出错。正确做法是使用mysql.connector的参数化查询,它会自动处理所有特殊字符的转义,同时彻底避免SQL注入风险。

修改后的代码示例

# 1. 定义SQL语句,用%s作为参数占位符
sql = """
INSERT INTO program_logging_table (
    program_logging_function_name,
    program_logging_function_description,
    program_logging_parameters,
    program_logging_return_value,
    program_logging_initial_timestamp,
    program_logging_final_timestamp
) VALUES (%s, %s, %s, %s, %s, %s);
"""

# 2. 准备参数元组(无需给JSON字符串手动加单引号)
params = (
    self.function_name,
    self.function_description,
    self.variables_dictionary,  # 直接传入json.dumps生成的JSON字符串
    self.return_value,
    self.initial_timestamp,
    self.final_timestamp
)

# 3. 执行参数化查询
cursor.execute(sql, params)
db_connection.commit()

问题原因解析

你用f-string拼接SQL时,self.variables_dictionary中的JSON包含单引号(比如sock字段里的('0.0.0.0', 0)),这些单引号会和SQL语句中包裹值的单引号冲突,直接破坏SQL语句结构,这就是错误提示中语法问题的来源。

关于_cmysql.escape_string的说明

_cmysql是mysql.connector的内部保护成员,直接访问不符合Python封装规范,且后续版本可能变更实现逻辑。参数化查询是官方推荐的标准方案,比手动转义更安全、简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 13:30:30