Завершение словаря для параметра выполнения sqlite - PullRequest
0 голосов
/ 08 мая 2018

Я пытаюсь передать данные, полученные из файла JSON, в базу данных SQLite. Таким образом, мои данные JSON содержат массив полей, каждое из которых хорошо отображается в столбце таблицы (дальнейшее вложение значений отсутствует). Поэтому каждый объект JSON представляет собой словарь, который я затем могу связать со значениями в операторе вставки.

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.

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Вы можете использовать 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']
''
0 голосов
/ 08 мая 2018

Вы должны инициализировать словарь с пустыми строками в качестве значений, а затем скопировать ключи из исходного словаря, как это

# 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...