请教, Key 和 Vlaue 都是 String 的字典,如何转换,并写入到 MySQL 的一个字段值里? 读取把内容还原成字典?

2020-11-26 19:23:05 +08:00
 qazwsxkevin
背景情况:字典是经过比较啰嗦计算的结果(比较耗时),
要把它放到 MySQL 的一个字段里存放,以方便后面的其它运算进行调取,
在本端操作 MySQL 都是用原生 SQL 语句的,没有用到 ORM 方式。。。
在网上的例子看到都是专门为字典本身生成一张表,以 Key 对应字段名,Vlalue 对应字段值写入,
而计算生成的字典,有嵌套,有 list(元素也是 String 类型),而且专门做 N 个表,管理起来是非常容易疏漏,

请教高手,有这样的例子可参考学习吗? 或者提点一个思路?
2104 次点击
所在节点    Python
12 条回复
misaka19000
2020-11-26 19:29:07 +08:00
换文档数据库
waytwoex
2020-11-26 19:32:12 +08:00
Jirajine
2020-11-26 19:34:54 +08:00
给些示例数据啊,你也没说清楚需求。
如果把内容当作整体不需要搜索过滤之类的,可以直接 dump 成 json 当字符串入库。
如果 key 固定可以搞个新表引用。
更复杂的情况那就换 NoSQL 。
qazwsxkevin
2020-11-26 19:38:06 +08:00
@misaka19000 对于问题,歪了

@waytwoex,记得好像 JSON 的类型,要 5.7 后才支持,这里的数据库比较老旧,是 5.1 的,升级是不可能的(不是我能定的),求旧版本的方法,dict 转成二进制,像是 MySQL 那样写进去是否妥当? 但是又未能找到把 dict 转换成二进制内容的操作方法,比较曲线奇葩 ^_^
qazwsxkevin
2020-11-26 19:45:24 +08:00
@Jirajine

testDict = {'a': {'时间': '2020-5-10-11-19', '力量': '26.77', '量值': '90', '变化': None, '属性': None, '对方力量': '31.75',
'TOP': '2291', '最低力量': '1.89', '最高力量': '2022', 'roundid': '899', '序号': '1'},
'b': {'时间': '2020-5-11-12-19', '力量': '36.77', '量值': '110', '变化': None, '属性': None, '对方力量': '31.75',
'TOP': '2291', '最低力量': '1.89', '最高力量': '2022', 'roundid': '900', '序号': '2'}}
Jirajine
2020-11-26 20:07:19 +08:00
你这完全固定结构,直接创个新表,加个 key 引用就行了。
islxyqwe
2020-11-26 20:11:09 +08:00
那你就作为 text 存 JSON 呗
nekochyan
2020-11-27 10:57:08 +08:00
json.dumps 转为字符串?
no1xsyzy
2020-11-27 13:10:23 +08:00
转成二进制,这个东西叫做序列化
序列化方案很多,目前感知上 JSON 比较符合

顺便给个效率最差,实现复杂,但泛用性高,只用两张表的方案
表 1:上级节点 UUID,Key,下级节点 UUID
表 2:末梢节点 UUID,Value
zunceng
2020-11-27 13:25:29 +08:00
是什么力量使你 value 拼错了两次...
luxiaoer
2020-12-01 12:33:40 +08:00
这种结构不是直接用 text 存储就可以了咩
只是给后续程序使用而已,又不考虑 查询 /报表 /聚合等等的
后续程序查出来 loads 下
xiaoqiao24
2020-12-04 16:44:00 +08:00
@zunceng 看到你这里 我忍不住笑了

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

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

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

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

© 2021 V2EX