Python Nested Dictionary With Sql Insert
Solution 1:
You can iterate over d.values()
and use the .keys()
and .values()
methods on the nested dictionaries to get the columns and values:
for v in d.values():
cols = v.keys()
vals = v.values()
sql = "INSERT INTO Parameters ({}) VALUES ({})".format(
', '.join(cols),
', '.join(['%s'] * len(cols)));
try:
cursor.execute(sql, vals)
except Exception as e:
pass
Note that in Python 3 dict.keys()
and dict.values()
return views of the dictionary’s keys and values (unlike lists in Python 2).
Solution 2:
Iterating over a dictionary actually iterates over the keys. for k in d:
is equivalent to for k in d.keys():
. You are looking for the values
or items
methods, which will actually return the key and the value as a tuple:
for k, v in d.items():
# k will take the values 'Test1', 'Test2', etc.# v will take the values of the corresponding nested dicts.
or
for v in d.values():
# v will take on the values of the nested dicts.
I would recommend using items
over values
since that way you will have a reference to which primary key (test) you are processing. I am going to go out on a limb here and guess that you will need this for the non-trivial version of your program.
From there, you use v
as you are trying to use d[...]
, since that is exactly what it is:
for k, v in d.items():
cols = v.keys()
vals = v.values()
sql = "INSERT INTO Parameters ({0}) VALUES ({1})".format(
', '.join(cols),
', '.join(['%s'] * len(v))
)
try:
cursor.execute(sql, vals)
except Exception as e:
pass
connection.close()
return
Since v
is a nested dictionary, you can get the number of elements in both cols
and vals
as just len(v)
.
Post a Comment for "Python Nested Dictionary With Sql Insert"