完成sqlite执行参数的字典
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了完成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.
您可以使用集合中的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']
''
您应该将带有空字符串的字典初始化为值,然后从源字典中复制键,就像这样
# 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
以上是关于完成sqlite执行参数的字典的主要内容,如果未能解决你的问题,请参考以下文章
java.lang.NullPointerException: Attempt to invoke virtual method ‘int android.database.sqlite异常(代码片段