Передача всех типов данных в параметры 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-инъекций?
Возможно ли "в тупую" преобразовать эти словари и списки в строки и так передать? Будет ли это безопасно?