Я пытаюсь вставить данные из словаря в базу данных, используя именованные параметры. У меня это работает с простым оператором 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: вы не указали значение для привязки 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, но execemany кажется более аккуратным способом сделать это.
Я упростил этот пример для удобства, фактические данные имеют гораздо больше записей в словаре, и я создаю его из текстового файла JSON.
У кого-нибудь есть предложения по тому, как я могу это сделать?