名前付きパラメーターを使用して、辞書からデータベースにデータを挿入しようとしています。私はこれを単純な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 supply 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 テキスト ファイルから作成しています。
これを行う方法について何か提案はありますか?