У меня есть приложение с графическим интерфейсом со списком людей, который содержит идентификатор базы данных человека и его атрибуты.Примерно так:
+----+------+
| ID | Name |
+----+------+
| 1 | John |
| 2 | Fred |
| 3 | Mary |
[...]
Этот список можно отфильтровать, поэтому количество и тип людей время от времени зависят.Чтобы получить список объектов Peewee Person
, я сначала получаю список видимых идентификаторов и использую следующий запрос:
ids = [row[0] for row in store]
Person.select().where(Person.id.in_(ids))
, что, в свою очередь, приводит к следующему SQL:
('SELECT "t1"."id", "t1"."name" FROM "person" AS "t1" WHERE ("t1"."id" IN (?, ?, ?, ...))', [1, 2, 3, ...])
Это приводит к ошибке OperationalError: too many SQL variables
в Windows с более чем 1000 человек.Это задокументировано в документах Peewee и SQLite.Обходные пути, предоставляемые онлайн, обычно относятся к групповым вставкам и способам разделения действия на куски.Есть ли способ обойти это ограничение с помощью упомянутого запроса SELECT ... WHERE ... IN
?
Слишком медленное получение отдельных объектов в списке:
people = [Person.get_by_id(row[0]) for row in store]
Возможно разделить список идентификаторовв макс. 1000 элементов используйте запрос выбора для каждого чанка, а затем объедините их как-нибудь?