Определить SQLite DATATYPE из класса Python динамически для создания COLUMN - PullRequest
0 голосов
/ 25 сентября 2019

Используя 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?

Заранее спасибо.Джакомо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...