Python 求助 - V2EX
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 2625 次点击
    这是一个创建于 1801 天前的主题,其中的信息可能已经有所发展或是发生改变。

    事情原本比较简单, 我想把 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 。。。
    luckyc
        2
    luckyc  
       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  
    PRO
       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
    < href="/member/ipwx" class="dark">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     Solana     2719 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 12:10 PVG 20:10 LAX 05:10 JFK 08:10
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86