2022年8月13日 19:32 by wst
python高级MySQL数据库是我们用的最多的数据库,但是有个头疼的地方:不能读写json数据。
自从MySQL5.7之后,开始支持json数据的读写了,这是值得欢呼的好事!
json数据还可以搜索、根据path获取等等特性,详见这篇文章。
今天以一个例子来阐述json字段的读写。
目的:对于不常变化的数据,可以采用json,这里为用户信息。(逻辑不太自洽,但用法可行)如下图所示:
代码如下:
#!/usr/bin/env python
"""
FileName: test_commodity
Author: wst
Email: movingheart000@gmail.com
Date: 2022/8/4 09:26:54
Desc:
"""
import asyncio
import json
from lib.pub_mysql import query_mysql, insert_mysql, pymysql
from lib.pub import mysql_pool
async def write_json():
""" 存储json数据到mysql"""
dic = {
"name": "李四",
"age": 22
}
sql = f"insert into UserTag(userTags) values ('{pymysql.escape_string(json.dumps(dic))}')"
res = await insert_mysql(mysql_pool, sql)
print(res)
return res
async def read_json():
""" 读取json数据 """
sql = f"select * from UserTag where userId=5"
res = await query_mysql(mysql_pool, sql)
print("res:", res)
return res
if __name__ == "__main__":
# asyncio.get_event_loop().run_until_complete(write_json())
asyncio.get_event_loop().run_until_complete(read_json())
说明:
1. 截图里的数据,userId为1、2的记录为手动修改数据库实现的。
2. userId为3的记录,UserTags内容未包含汉字,可正常显示。
3. userId为4的记录,插入的时候未使用pymysql.escape_string处理,汉字不能正常显示。
4. userId为5的记录,使用了pymysql.escape_string处理,汉字可以正常显示,用代码读写都没有问题。
如有疑问,欢迎探讨。v:Beeb2b3