完成sqlite执行参数的字典

问题描述 投票:0回答:2

我正在尝试将从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.

python json sqlite
2个回答
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']
''

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
© www.soinside.com 2019 - 2024. All rights reserved.