我的目标是彻底改变Listings字段

数据库中的 struct : { "other":{ "price": 0, "isFrozen": false, }, "listings": { "price": 0, "isFrozen": false, "isLocked": false, "pricings": [], "isSalable": false, "listingId": "c2520a55-83fa-4989-a219-ac0efb13bf9a", "isSuspended": false, "lockReasons": [], "merchantSku": "AAAQKIRMIZIL", "dispatchTime": 0 } }

我一直在try 这样的东西,但没有结果 我正在try 根据API返回的信息进行更新.响应类型[‘Listings’][0]为DICT.

update products set column_name= JSON_REPLACE(column_name, '$.listings', "+response['listings'][0]+") where id='"+str(id)+"'

推荐答案

下面是我测试过的一段Python片段:

doc = json.dumps(response["listings"][0])
id = 1

sql = """
  UPDATE products 
  SET column_name = JSON_SET(column_name, '$.listings', CAST(? AS JSON)) 
  WHERE id = ?
"""

cursor.execute(sql, (doc, id))

cnx.commit()

诀窍在于,您应该将您的Python字典序列化为JSON格式的字符串,然后将其作为参数(使用查询参数,而不是字符串连接)传递给MySQL.在MySQL中,使用CAST()将字符串转换为JSON值,然后它将保留嵌套 struct .如果不强制转换,JSON将被赋值为恰好包含逗号和引号之类的字符串值,而不是嵌套的JSON对象.

附言:请,请,请养成使用查询参数而不是字符串连接的习惯.

Mysql相关问答推荐

SQL不断返回查询失败,并且不知道从这里到哪里go

如何合并有多行的json列

我在连接到 mysql 的 node js 中收到错误消息发送到客户端后无法设置标头

根据 JOIN 结果计算列中的值?

SQL - 基本的内部连接查询

Select 并统计所有条目并根据条目对它们进行分组

拆分列值并适当地返回拆分值

从 mysql RDS 导出数据以导入 questDb

创建将列与多个值进行比较的索引

MYSQL:范围匹配与周年纪念日

如何显示患者预约中的专业人员姓名?

减少mysql中的值但不是负数

基于字符串动态创建 PHP 对象

将 mySQL 查询作为 cron 作业(job)运行?

我可以在单个 Amazon RDS 实例上创建多少个数据库

什么是全文索引,我应该什么时候使用它?

MySQL查询/子句执行顺序

判断多个列的一个值

如何将具有相同列值的mysql行分组为一行?

在 MySQL Workbench 中导出超过 1000 条记录的查询结果