V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
qazwsxkevin
V2EX  ›  Python

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

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

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

    @waytwoex,记得好像 JSON 的类型,要 5.7 后才支持,这里的数据库比较老旧,是 5.1 的,升级是不可能的(不是我能定的),求旧版本的方法,dict 转成二进制,像是 MySQL 那样写进去是否妥当? 但是又未能找到把 dict 转换成二进制内容的操作方法,比较曲线奇葩 ^_^
    qazwsxkevin
        5
    qazwsxkevin  
    OP
       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
        6
    Jirajine  
       2020-11-26 20:07:19 +08:00 via Android
    你这完全固定结构,直接创个新表,加个 key 引用就行了。
    islxyqwe
        7
    islxyqwe  
       2020-11-26 20:11:09 +08:00
    那你就作为 text 存 JSON 呗
    nekochyan
        8
    nekochyan  
       2020-11-27 10:57:08 +08:00
    json.dumps 转为字符串?
    no1xsyzy
        9
    no1xsyzy  
       2020-11-27 13:10:23 +08:00
    转成二进制,这个东西叫做序列化
    序列化方案很多,目前感知上 JSON 比较符合

    顺便给个效率最差,实现复杂,但泛用性高,只用两张表的方案
    表 1:上级节点 UUID,Key,下级节点 UUID
    表 2:末梢节点 UUID,Value
    zunceng
        10
    zunceng  
       2020-11-27 13:25:29 +08:00
    是什么力量使你 value 拼错了两次...
    luxiaoer
        11
    luxiaoer  
       2020-12-01 12:33:40 +08:00
    这种结构不是直接用 text 存储就可以了咩
    只是给后续程序使用而已,又不考虑 查询 /报表 /聚合等等的
    后续程序查出来 loads 下
    xiaoqiao24
        12
    xiaoqiao24  
       2020-12-04 16:44:00 +08:00
    @zunceng 看到你这里 我忍不住笑了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1024 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 20:31 · PVG 04:31 · LAX 12:31 · JFK 15:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.