выбрать из таблицы sqlite, где rowid в списке, используя python sqlite3 - DB-API 2.0 - PullRequest
18 голосов
/ 23 апреля 2011

работают следующие работы:

>>> 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 без необходимости сначала форматировать его в строку?

Ответы [ 4 ]

28 голосов
/ 23 апреля 2011

К сожалению нет. Каждое значение должно иметь свою собственную метку параметра (?). Поскольку список аргументов может (предположительно) иметь произвольную длину, вы должны использовать форматирование строк, чтобы построить правильное количество меток параметров. К счастью, это не так сложно:

args=[2,3]
sql="select * from sqlitetable where rowid in ({seq})".format(
    seq=','.join(['?']*len(args)))

cursor.execute(sql, args)
3 голосов
/ 21 августа 2018

В Python 3.6 вы также можете создавать запросы со строками f:

args=[2, 3]
query = f"SELECT * FROM sqlitetable WHERE rowid in ({','.join(['?']*len(args))})"
cursor.execute(query, args)
1 голос
/ 22 апреля 2018

Давайте ids_list будет список желаемых идентификаторов строк, простое решение будет:

sql = "SELECT * FROM sqlitetable WHERE rowid IN {}".format(str(tuple(ids_list)
cursor.execute(sql)
0 голосов
/ 06 октября 2017

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

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