python sqlite insert paramètres nommés ou null

J'essaie d'insérer des données à partir d'un dictionnaire dans une base de données en utilisant des paramètres nommés. J'ai ce travail avec une simple instruction SQL par exemple

SQL = "INSERT INTO status (location, arrival, departure) VALUES (:location, :arrival,:departure)"
dict = {'location': 'somewhere', 'arrival': '1000', 'departure': '1001'}
c.execute(SQL,dict)

Insère quelque part dans l'emplacement, 1000 dans l'arrivée de la colonne, et 1001 dans le départ de la colonne.

Les données que je vais effectivement avoir contiendra un endroit, mais peut contenir soit à l'arrivée ou au départ mais peut ne pas avoir les deux (dans ce cas, rien ou NULL peut aller dans la table). Dans ce cas, j'obtiens sqlite3.ProgrammingError: Vous n'avez pas à fournir une valeur pour la liaison 2.

Je peux résoudre ce problème en utilisant defaultdict:

c.execute(SQL,defaultdict(str,dict))

Pour rendre les choses un peu plus compliqué, je vais vraiment avoir une liste de dictionnaires contenant plusieurs endroits avec une arrivée ou au départ.

    ({'location': 'place1', 'departure': '1000'},
    {'location': 'palce2', 'arrival': '1010'},
    {'location': 'place2', 'departure': '1001'})

et je veux être en mesure de l'exécuter avec c.executemany cependant maintenant, je ne peux pas utiliser defaultdict.

J'ai pu parcourir chaque dictionnaire dans la liste et de l'exécution de nombreux c.exécuter des instructions, mais executemany semble plus propre façon de le faire.

J'ai simplifié de cet exemple pour des raisons de commodité, les données réelles a beaucoup plus d'entrées dans le dictionnaire, et je le construire à partir d'un JSON fichier texte.

Quelqu'un a des suggestions pour savoir comment je pourrais faire cela?

source d'informationauteur user2497185