Python + sqlalchemy 操作 mysql 的 JSON 类型

2019-01-09 20:09:02 +08:00
 Kcelone

针对于 MySQL 的 JSON 类型,官方上已经做了详细的介绍,在此,简单啰嗦几句吧,毕竟曾经没怎么遇到过。

  1. sql 脚本形式: 创建:create table stu(id int primary key, name varchar(20), remark JSON); 插入:insert into stu(id, name, remark) values(1, 'ha', '{'sc':'1a', 'mc':'2b'}'); 更新:update stu set remark = json_set(remark, '$.sc', '3a'); 删除:update stu set remark = json_remove(remark, '$.sc'); 增键:update stu set remark = json_set(remark, '$.tc', '5e');

    对于这些操作,是使用 sql 脚本进行,需要执行原生 sql 脚本。但平常更多使用的是 ORM 形式。

  2. orm 形式: 对于 ORM 形式,当然也可以使用 嵌入式的 sql 脚本进行完成,(此处不再说)。 或着结构对象来做。 比如上面的这个表,对于 ORM 形式,应该有一个 model 与之对应: 可以为: class Stu: id = Column(types.integer, primary_key=True) name = Column(types.String(20)) remark = Column(types.JSON)

    这个时候,可以这么做: the_stu = self.db_session.query(Stu).filter(Stu.id == uid).first() rem = the_stu.remark # 备份 the_stu.remark=None
    db_session.flush() # 具体为什么这么做还没明白,直接赋值不起作用。 rem['news'] = 'newsss' # 添加新值 the_stu.remark = rem # 将新的对象重新赋给模型对象的属性。 db_session.commit()

不知道还有没有更好的解决方式,希望多多指教,大家都可以少走弯路,提高工作效率,一起学习加群 902788038, 群里也有 HR 小姐姐们,在进步的同时也祝愿能找到心仪工作。

4543 次点击
所在节点    Python
2 条回复
fanhaipeng0403
2019-01-09 23:32:49 +08:00
Kcelone
2019-01-10 15:57:33 +08:00
@fanhaipeng0403 不忙了学习下,谢谢。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/525486

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX