【发布时间】:2016-10-12 15:11:18
【问题描述】:
我在处理一个 XML 文件后生成了一个非常大的字典,我正在寻找从这个字典中提取的内容,并将列和值插入到我的 mySQL 数据库表中。
我正在使用 Python 3。
字典是嵌套的;这是我所拥有的一个简单示例:
d ={'Test1'{'TestID':'first','Dev_Type':'this device','Version':'v1_0','Address':'some Address'}
'Test2'{'TestID':'second','Dev_Type':'that device','Version':'v1_0','Address':'other Address'}
'Test3'{'TestID','third','Dev_Type':'other device','Version':'v1_0','Address':'another Address'}
}
本质上,我想遍历该字典中的每个主键(例如 Test1、Test2、Test3)并将辅助键提取为列名元组,并将关联的辅助键值提取为值元组,有点像这样:
cols = ('TestID','Dev_Type','Version','Address')
vals = ('first','this device','v1_0','some Address')
在遍历每个主键时,我将使用以下命令将两个元组添加到我的 mySQL 表中:
sql = "INSERT INTO Parameters ({0}) VALUES ({1})".format(', '.join(cols), ', '.join(['%s'] * len(cols)));
try:
cursor.execute(sql, vals)
except Exception as e:
print(e)
pass
然后在下一个主键('Test2')上重复该过程。
我已进行了初步尝试,但在此实例中对主键进行了硬编码:
for k, v in d:
#Missing appropriate method here
cols = tuple(d['Test1'].keys())
vals = tuple(d['Test1'].values())
sql = "INSERT INTO Parameters ({0}) VALUES ({1})".format(', '.join(cols), ', '.join(['%s'] * len(cols)));
try:
cursor.execute(sql, vals)
except Exception as e:
pass
connection.close()
return
【问题讨论】:
-
这是切线的,但您应该使用数据库 API 的参数替换来防止 SQL 注入:docs.python.org/2/library/sqlite3.html#sqlite3.Cursor.execute
-
您的意思是在示例字典中的键和值之间省略
:吗?
标签: python python-3.x dictionary