我正在尝试使用命名参数将字典中的数据插入数据库。我有一个简单的 SQL 语句,例如
SQL = "INSERT INTO status (location, arrival, departure) VALUES (:location, :arrival,:departure)"
dict = {'location': 'somewhere', 'arrival': '1000', 'departure': '1001'}
c.execute(SQL,dict)
将某处插入位置,1000 插入到达列,1001 插入离开列。
我实际拥有的数据将包含位置,但可能包含到达或出发,但可能不包含两者(在这种情况下,表中没有任何内容或 NULL 可以进入)。在这种情况下,我得到 sqlite3.ProgrammingError: You did not provide a value for binding 2。
我可以通过使用 defaultdict 来解决这个问题:
c.execute(SQL,defaultdict(str,dict))
为了让事情稍微复杂一点,我实际上将有一个字典列表,其中包含多个到达或离开的位置。
({'location': 'place1', 'departure': '1000'},
{'location': 'palce2', 'arrival': '1010'},
{'location': 'place2', 'departure': '1001'})
我希望能够用 c.executemany 运行它,但是我现在不能使用 defaultdict。
我可以遍历列表中的每个字典并运行许多 c.execute 语句,但 executemany 似乎是一种更简洁的方法。
为方便起见,我简化了这个示例,实际数据在字典中有更多条目,并且我从 JSON 文本文件构建它。
有人对我如何做到这一点有任何建议吗?