Передача всех типов данных в параметры sqlite3.execute() Python

Цель: безопасная вставка / обновление данных в БД не зависимо от их типа

Входные данные, которые нужно передать в таблицу

data = {
    'tg_id': 121312123,
    'cart': [123123,4353.45345,56785657],
    'address': 'Тест адрес',
    'fio': None,
    'phone': '+79998887766',
    'params': {'param1': 'value1', 'param2': 1555},
}

Строка без данных формируется следующим образом

columns = ', '.join(data.keys())
placeholders = ':'+', :'.join(data.keys())
query = 'INSERT INTO users (%s) VALUES (%s)' % (columns, placeholders)
# -> 'INSERT INTO users (tg_id, cart, address, fio, phone, params) VALUES (:tg_id, :cart, :address, :fio, :phone, :params)'

Далее передаем это на выполнение

cur.execute(query, data)

В параметры .execute() можно передать словарь, если его ключи не содержат списки или словари. Иначе вызывается исключение

sqlite3.ProgrammingError: Error binding parameter 2: type 'list' is not supported

Как можно сделать это без риска для SQL-инъекций?

Возможно ли "в тупую" преобразовать эти словари и списки в строки и так передать? Будет ли это безопасно?


Ответы (0 шт):