Я обработал очень большой словарь после обработки XML-файла, и я ищу извлечение из этого словаря и вставлять столбцы и значения в таблицу mySQL.Вложенный словарь Python с вставкой SQL
Я использую 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: https://docs.python.org/2/library/sqlite3.html#sqlite3.Cursor.execute –
Вы имели в виду не указывайте ':' между ключами и значениями в вашем примере dict? –