Выберите из таблицы sqlite, где rowid в списке используется python sqlite3 - DB-API 2.0
Следующие работы:
>>> cursor.execute("select * from sqlitetable where rowid in (2,3);")
Нельзя:
>>> cursor.execute("select * from sqlitetable where rowid in (?) ", [[2,3]] )
sqlite3.InterfaceError: Error binding parameter 0 - probably unsupported type.
Есть ли способ перейти в список python, не форматируя его в строку сначала?
Ответы
Ответ 1
К сожалению, нет. Каждому значению должен быть присвоен свой собственный знак параметра (?
).
Поскольку список аргументов может (предположительно) иметь произвольную длину, вы должны использовать строковое форматирование для построения правильного количества меток параметров. К счастью, это не так сложно:
args=[2,3]
sql="select * from sqlitetable where rowid in ({seq})".format(
seq=','.join(['?']*len(args)))
cursor.execute(sql, args)
Ответ 2
SQLite изначально поддерживает только типы TEXT, INTEGER, REAL, BLOB и NULL. Если вы хотите использовать другие типы, вы должны добавить поддержку для них самостоятельно. Параметр detect_types и использование пользовательских преобразователей, зарегистрированных с помощью функции register_converter() на уровне модуля, позволяют вам легко это сделать.
Как описано выше, SQLite поддерживает только ограниченный набор типов изначально.
Чтобы использовать другие типы Python с SQLite, вы должны адаптировать их к одному из поддерживаемых модулей sqlite3 для SQLite: один из NoneType, int, float, str, bytes.
https://docs.python.org/3.6/library/sqlite3.html#using-adapters-to-store-additional-python-types-in-sqlite-databases