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
leeguo
V2EX  ›  Python

Python 求助

  •  
  •   leeguo · 2020-11-05 21:59:19 +08:00 · 2359 次点击
    这是一个创建于 1485 天前的主题,其中的信息可能已经有所发展或是发生改变。

    事情原本比较简单, 我想把 json 存入数据库, 结果我用 python json.dumps()把数据转为 json, 自动转成了 unicode 字符串, 我也没在意, 不过存入了数据库, unicode 的反斜杠不见了,取出来也没有, 被 mysql 的 json 坑惨了, 只有一个 uxxxx, 而不是\uxxxx , 里边夹杂了没有转成 unicode 字符串的 比如英文数字之类的, 我该怎么正常为中文呢, 之前替换, 老式出现错误. 现在字符串全是这种. 大佬们, 我该怎么办呢. eg: u9ad8u9e97u5c4bu4e09u4ee3u8972u540d u516bu4ee3u76ee u5e02u5dddu67d3u4e94u90ce u5bc6u77403650u65e5 u8bf7u4ee5u4f60u7684u540du5b57u547cu5524u6211

    19 条回复    2020-11-06 11:44:40 +08:00
    ipwx
        1
    ipwx  
       2020-11-05 22:01:23 +08:00
    我猜你存进数据库的时候,既没有用 ORM 也没有用 prepared statement 。。。
    l4ever
        2
    l4ever  
       2020-11-05 22:03:15 +08:00 via iPhone   ❤️ 1
    pymysql.escape_string()
    leeguo
        3
    leeguo  
    OP
       2020-11-05 22:03:15 +08:00
    @ipwx 没有, 图简单, 当时一时直接用的 pymysql...
    GodFastion
        4
    GodFastion  
       2020-11-05 22:03:33 +08:00 via Android   ❤️ 1
    for 遍历一下,每个 u 前面加个斜杠🤓
    leeguo
        5
    leeguo  
    OP
       2020-11-05 22:13:17 +08:00
    @GodFastion 不行额, 之前我是替换的, 总会出一些错... 我都疯了....
    ferock
        6
    ferock  
       2020-11-05 22:23:45 +08:00 via iPhone
    不要转 unicode 不就行了
    leeguo
        7
    leeguo  
    OP
       2020-11-05 22:25:33 +08:00
    @ferock 问题是我, 已经弄了几十万的数据了, 现在已经晚了. 只有想办法把反斜杠加上去....
    leeguo
        8
    leeguo  
    OP
       2020-11-05 22:28:58 +08:00
    我能转成功一部分, 但是一起转成汉字重会出错一些....
    ungrown
        9
    ungrown  
       2020-11-05 22:47:04 +08:00   ❤️ 1
    @leeguo #8
    出错的例子给一下
    包括数据库里带 u 的字符串、预期的原字符串、报错
    imn1
        10
    imn1  
       2020-11-05 22:57:14 +08:00   ❤️ 1
    还不如再转一次,update
    想清转 json 楚留不留汉字,或者入库用什么 sql 语句
    lxilu
        11
    lxilu  
       2020-11-05 23:23:13 +08:00 via iPhone
    u[a-f0-9]{4}不行?
    leeguo
        12
    leeguo  
    OP
       2020-11-06 00:49:38 +08:00
    谢谢各位了, 我找到问题所在了, 弄好了 unicode, 在转回去, 可能不是我转 json 的问题, 而是转了 json, 然后再次存储过程中, 有几条数据 json 数据, 无法存储, 具体问题不知道, 但错误率可能在 1/1000 一下, 但数据比较多, 所以弄了很多次以喜爱在就错误了, 谢谢各位了, 这么晚了, 先休息吧, 我明 er 看看为什么那几条 json 存不进去....
    HuberyPang
        13
    HuberyPang  
       2020-11-06 09:27:15 +08:00
    这个我遇到过,就是转义的问题。数据存入 MySQL 时,\会被转义为空。json.dumps(, ensure_ascii=False)就行了
    leeguo
        14
    leeguo  
    OP
       2020-11-06 10:14:43 +08:00
    @HuberyPang 是的,我之前没注意, 存了几十万数据之后才发现.....
    ungrown
        15
    ungrown  
       2020-11-06 10:18:59 +08:00   ❤️ 1
    @leeguo #14 MySQL 我不熟,如果不支持 Unicode 字符串的话,可以考虑 base64
    ipwx
        16
    ipwx  
       2020-11-06 10:59:07 +08:00   ❤️ 1
    @ungrown 用 prepared statement + 参数绑定,手拼字符串会出问题很正常。如果一定要手拼,2L 已经给出答案了,escape_string() ...

    楼主你对二楼的正确答案都无视了好不好。。。
    ipwx
        17
    ipwx  
       2020-11-06 11:00:03 +08:00
    @ungrown 这根本不是 MySQL 是不是支持 unicode 字符串,感觉是楼主可能不懂 escape 是咋回事。。还有就是 unicode & utf-8 这两者楼主也需要了解一下,mysql 默认以 utf-8 存储字符串。
    leeguo
        18
    leeguo  
    OP
       2020-11-06 11:43:02 +08:00
    @ipwx @-@... 我看了一下, 没看动,就找其他方法了, 谢谢了, 我在看看...
    no1xsyzy
        19
    no1xsyzy  
       2020-11-06 11:44:40 +08:00   ❤️ 1
    想象它是一个 LL(4) 的编程语言写个解释器吧,然后全部重新 update 过一遍

    方便还是 ORM 方便,主要是,有对数据库的防御性编程思想在的话,手写 SQL 总是思前想后,对比起来 ORM 是真的方便
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2858 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 06:32 · PVG 14:32 · LAX 22:32 · JFK 01:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.