如何通过python将python字典存储到mysql DB中

Vb4*_*407 12 python mysql dictionary

我试图通过将字典转换为字符串,然后尝试插入,将以下字典存储到mysql DB中,但我收到以下错误.如何解决这个问题,还是有其他方法将字典存储到mysql DB中?

dic = {'office': {'component_office': ['Word2010SP0', 'PowerPoint2010SP0']}}
d = str(dic)

# Sql query
sql = "INSERT INTO ep_soft(ip_address, soft_data) VALUES ('%s', '%s')" % ("192.xxx.xx.xx", d )

soft_data is a VARCHAR(500)
Run Code Online (Sandbox Code Playgroud)

错误:执行异常(1064,"您的SQL语法中有错误;请查看与您的MySQL服务器版本对应的手册,以便在'office'附近使用正确的语法:{'component_office':['Word2010SP0','PowerPoint2010SP0 '在第1行")

有什么建议或帮助吗?

var*_*tec 18

首先,不要像这样构造原始SQL查询.永远不能.这是参数化查询的用途.您要求进行SQL注入攻击.

如果要存储任意数据(例如Python字典),则应该序列化该数据.JSON是格式的不错选择.

总体而言,您的代码应如下所示:

import MySQLdb
import json

db = MySQLdb.connect(...)    
cursor = db.cursor() 

dic = {'office': {'component_office': ['Word2010SP0', 'PowerPoint2010SP0']}}
sql = "INSERT INTO ep_soft(ip_address, soft_data) VALUES (%s, %s)"

cursor.execute(sql, ("192.xxx.xx.xx", json.dumps(dic)))
cursor.commit()
Run Code Online (Sandbox Code Playgroud)

  • @VignanBandi:`dic = json.loads(str_from_db)` (4认同)