Используя Python, мне нужно динамически добавлять столбцы в таблицу, находящуюся в базе данных SQLite.
У меня есть список диктов, сформированный таким образом:
records = [
{'key1': 10,
'key2': 'Foo text',
'key3': datetime.datetime(2019, 9, 25, 12, 45, 20, 960723)
'key4': 5.6
},
{'key2': 'Foo text',
'key3': datetime.datetime(2019, 9, 25, 12, 45, 20, 960723)
'key4': 5.6
'key5': 'Apple'
},
{'key1': 10,
'key4': 5.6
'key8': datetime.datetime(2017, 10, 25, 12, 45, 20, 960723)
'key9': None
}
]
Давайте также скажем, что все значения, хранящиеся в диктовках, являются простыми объектами (даты, строки, числа с плавающей точкой, целые числа)
У меня есть резидентная таблица в базе данных SQLite, определенная следующим образом:
CREATE TABLE foo_table (
row_id INTEGER PRIMARY KEY AUTOINCREMENT,
key1 INTEGER NOT NULL
)
После извлечения из таблицы всех уже вставленных имен столбцов (что я могу сделать с помощью PRAGMA table_info(fe_parser)
и итерации порезультаты), скажем, у меня есть список columns_in_db
, который содержит все имена столбцов, которые уже определены в foo_table
.
Итерация по records
Я легко могу найти ключи, которые не определены в foo_table
:
for el in records:
for k in el:
if k, value not in columns_in_db.items():
---> # CODE_TO_ADD
columns_in_db.append(k)
Где CODE_TO_ADD будет выглядеть примерно так:
cursor.execute(f"ALTER TABLE foo_table ADD {k} {type_to_str(value)};")
Есть ли простой способ сопоставить объекты python с определением столбца SQL?В противном случае, у вас есть какие-либо предложения о том, как написать функцию type_to_str
?
Заранее спасибо.Джакомо