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

如何使用MySQL更新列中的JSON数据,替换listings字段?

解决JSON列listings字段替换问题

原语句的问题

你之前写的SQL有两个核心问题:

  • 直接把Python的dict变量拼进SQL字符串,会导致MySQL收到的不是合法JSON格式(Python dict用单引号,而JSON要求双引号),而且会触发SQL语法错误。
  • 这种字符串拼接方式存在SQL注入风险,绝对不推荐。

正确的实现方式

方法1:用参数化查询(推荐,安全可靠)

不管你用的是pymysql还是mysql-connector-python,都应该用参数化查询来传递JSON数据,Python会自动把dict序列化为合法的JSON字符串:

# 示例:基于pymysql的实现
import pymysql

# 数据库连接(自行替换你的配置)
conn = pymysql.connect(host='你的主机地址', user='用户名', password='密码', db='数据库名')
cursor = conn.cursor()

# 准备要更新的数据
target_listing = response['listings'][0]
product_id = str(id)

# 参数化SQL语句,避免手动拼接的风险
sql = "UPDATE products SET column_name = JSON_REPLACE(column_name, '$.listings', %s) WHERE id = %s"
# 执行查询,直接传入dict和ID,驱动会自动处理JSON序列化
cursor.execute(sql, (target_listing, product_id))

# 提交事务并关闭连接
conn.commit()
cursor.close()
conn.close()

方法2:手动序列化JSON后拼接(不推荐,仅作参考)

如果一定要用字符串拼接,必须先把Python dict序列化为标准JSON字符串:

import json

# 把dict转成标准JSON字符串
target_listing_json = json.dumps(response['listings'][0])
product_id = str(id)

# 用单引号包裹JSON字符串,避免和SQL的双引号冲突
sql = f"UPDATE products SET column_name = JSON_REPLACE(column_name, '$.listings', '{target_listing_json}') WHERE id = '{product_id}'"
# 执行SQL(注意:此方式仍有SQL注入风险,仅应急使用)

验证替换结果

执行更新后,可以用以下SQL确认替换是否成功:

SELECT column_name->>'$.listings' FROM products WHERE id = '你的产品ID';

内容的提问来源于stack exchange,提问作者kaann.gunerr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 20:25:58