如何用Python将嵌套列表/字典以字符串形式插入MySQL数据库
嘿,这个问题我太熟了!要把Python里的嵌套列表/字典存成字符串放进MySQL,核心就是把结构化数据序列化成标准字符串格式,最实用的就是JSON——毕竟JSON和Python的列表、字典几乎是无缝对接的,而且MySQL对JSON的支持也很友好。
先纠正下你原来普通插入的小问题哈:你写的sql = 'INSERT INTO table VALUES ('name', 'likes')'是不对的,这里得用占位符%s来绑定变量,不然会把字符串'name'和'likes'直接插进去,而不是你list_data里的实际值。正确的普通插入写法应该是这样:
list_data = ['Kate', 'apple'] sql = 'INSERT INTO your_table (name, likes) VALUES (%s, %s)' # 指定字段更稳妥 cursor.execute(sql, list_data) conn.commit() # 别忘了提交事务!
好了,回到嵌套数据的场景,分两种情况给你演示:
1. 嵌套列表的情况
比如list_data = ['Kate', ['apple', 'orange', 'banana']],我们用json.dumps()把嵌套的列表转成JSON字符串就行:
import json original_data = ['Kate', ['apple', 'orange', 'banana']] # 把第二个元素(嵌套列表)序列化成JSON字符串 processed_data = [original_data[0], json.dumps(original_data[1])] sql = 'INSERT INTO your_table (name, likes) VALUES (%s, %s)' cursor.execute(sql, processed_data) conn.commit()
2. 嵌套字典的情况
处理逻辑和列表完全一样,json.dumps()同样能搞定字典:
original_data = ['Kate', {'food': 'apple', 'sports': 'running'}] processed_data = [original_data[0], json.dumps(original_data[1])] cursor.execute(sql, processed_data) conn.commit()
额外小贴士:
- 如果你的MySQL版本是5.7及以上,建议把存储嵌套数据的字段类型设为
JSON(而不是VARCHAR),这样MySQL会优化JSON数据的存储,还能直接用MySQL的JSON函数做查询(比如直接查喜欢apple的用户,不用全表扫描),插入方式和上面完全一样。 - 如果数据里有中文,记得给
json.dumps()加个参数:json.dumps(..., ensure_ascii=False),不然中文会变成Unicode转义字符,存进去看着别扭。 - 从数据库读回来的时候,用
json.loads()就能把字符串还原成Python的列表/字典:cursor.execute('SELECT name, likes FROM your_table WHERE name = %s', ('Kate',)) name, likes_str = cursor.fetchone() likes = json.loads(likes_str) # 还原成原有的列表/字典
内容的提问来源于stack exchange,提问作者Bruce Feng
相关产品推荐
相关产品推荐

