python - 为 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。
解决方案
您可以使用集合中的 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']
''
推荐阅读
- angular - 如何在 Angular 中获取绑定字符串
- reactjs - 如何在图像元素加载事件后测试状态变化?
- java - 后台网络 I/O 的服务、IntentService 或线程
- workflow - 失败后重新启动 Informatica 会话,尝试 N 次或通知
- php - 尽管看到该字段,但使用 Webdriver $I->fillField 的代码接收不起作用
- databricks - 我可以在数据块中创建等效的 SQL 临时表吗?
- javascript - 为什么当我尝试读取 object[key].value 时出现未定义?
- python - 查找给定角色中的所有用户 discord.py
- xamarin.forms - 如何从 ParseObject 的子类中的相关用户获取数据?
- ansible - 需要帮助循环通过 Ansible msg 输出