gpt4 book ai didi

mysql - Python MySQL 插入 unicode

转载 作者:行者123 更新时间:2023-11-29 10:01:15 34 4
gpt4 key购买 nike

我正在尝试将 JSON 数据插入 MySQL 数据库:

def mapClients():
for d in devices:
clientMap = d['dot11.device']['dot11.device.associated_client_map'].keys()
for item in clientMap:
clientList = kr.device_by_mac(item)
times = kr.device_summary_since()
for c in clientList:
sqlMac = c['kismet.device.base.macaddr'],
sqlType = c['kismet.device.base.type'],
sqlManuf = c['kismet.device.base.manuf'],
ktime = c['kismet.device.base.last_time'],
for t in ktime:
sqlTime = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(t))
cur.execute("INSERT INTO devices(apID,mac,type,manuf,last_seen) VALUES(1,'" + str(sqlMac) + "','" + str(sqlType) + "','" + str(sqlManuf) + "','" + sqlTime + "');")
conn.commit()

mapClients()

这将返回以下错误:

pymysql.err.ProgrammingError: (1064, u"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'VALUES(1,'(u'58:E2:8F:CF:20:B3',)','(u'Wi-Fi Client',)','(u'Apple',)','20-10-201' at line 1")

我可以从错误中看到各个值都带有“u”后缀。通过大量搜索和学习,我了解到(我认为)这意味着数据是 unicode。

我想要做的是找到一种转换/解码数据的方法,以便 INSERT 语句起作用。有些变量是元组,有些是字符串。非常感谢任何帮助。

最佳答案

您正在插入元组,而不是字符串;删除结尾的逗号:

sqlMac =  c['kismet.device.base.macaddr']
sqlType = c['kismet.device.base.type']
sqlManuf = c['kismet.device.base.manuf']
ktime = c['kismet.device.base.last_time']
sqlTime = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(ktime))

尾随逗号将这些表达式转换为元组,元组上的 str() 为您提供容器 Unicode 字符串,如 u'....'然后与您添加的 ' 引用发生冲突的表示形式。

请注意,无需循环 ktime!

接下来,您确实想要使用SQL 参数,而不是字符串连接。使用占位符代替 '"+ str(...) + "',并将引用处理留给数据库适配器:

cur.execute("""
INSERT INTO devices (apID, mac, type, manuf, last_seen)
VALUES (1, %s, %s, %s, %s)
""", (sqlMac, sqlType, sqlManuf, sqlTime))

%s 是占位符;根据您的具体 MySQL Python 库,您可能需要使用 ? 问号。

这不仅可以让您避免考虑引用,还可以消除一个严重的安全问题:您加载的 JSON可能 包含 SQL 注入(inject)攻击,而 SQL 参数是中和的最佳方法那个攻击向量。

关于mysql - Python MySQL 插入 unicode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52908661/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com