完成sqlite执行参数的字典

时间:2018-05-08 14:24:28

标签: python json sqlite

我正在尝试将从JSON文件获取的数据提供给SQLite数据库。所以我的JSON数据包含一个字段数组,每个字段都很好地映射到表列(没有进一步的值嵌套)。因此,每个JSON对象都是一个字典,然后我可以将其绑定到insert语句中的值。

row_values = {'id': 1, 'field1': 'some value', 'field2': 'some value', 'field3': 'some value'}
sql = "insert into my_table (id, field1, field2, field3) values (:id, :field1, :field2, :field3)"
cursor.execute(sql, row_values)

问题是,并非所有字段都始终存在于JSON输入中,因此对于一个对象,我的字典“row_values”可能缺少例如field2(产生错误“您没有为绑定x提供值”) 。获取完整字典的最佳方法是什么,其中存在缺失键但只是将空字符串作为值?我想首先创建一个字典,其中包含所有必需的键和值为空字符串({'id':'','field1':'','field2':'','field3':''}),然后分配来自JSON对象的值({'id':'','field1':'some value','field3':'some value'}),但这似乎没有维护缺少键的字典条目

所以我可能做错了,甚至不确定这是不是最好的方式......

提前感谢您的帮助!

R上。

2 个答案:

答案 0 :(得分:0)

您应该将带有空字符串的字典初始化为值,然后从源字典中复制键,如此

# missing field2
row_values = {'id': 1, 'field1': 'some value', 'field3': 'some value'}

final_row = {'id':'','field1':'','field2':'','field3':''}

for k in final_row.keys():
    final_row[k] = row_values.get(k,'')
# use this dict for sqlite
print final_row

答案 1 :(得分:0)

你可以使用集合中的defaultdict创建一个字典,如果你要求一个不存在的键,它将给出一个空字符串

from collections import defaultdict
row_values = {'id': 1, 'field1': 'some value', 'field3': 'some value'}
final_row = defaultdict(str, row_values)

>>> final_row['field1']
'some value'
>>> final_row['field2']
''