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
相关产品推荐
相关产品推荐

