首页 > 解决方案 > 为 sqlite 执行参数完成字典

问题描述

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

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。

标签: pythonjsonsqlite

解决方案


您可以使用集合中的 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']
''

推荐阅读