Выберите из таблицы 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