Задать вопрос
@toddbarry

Как в Gino достать из базы все строки, у которых id совпадает с одним из значений в списке с использованием async for?

Мне необходимо доставать из базы все строки, у которых id совпадает с одним из значений в изначально заданном списке. Список может быть достаточно большим, поэтому отправка запросов последовательно к базе - плохой вариант. В связи с этим мне необходимо использовать
async for Table.select('ids').where(Table.id in spisok).gino.iterate():

Однако метод where не понимает подобного синтаксиса, а в официальном руководстве не получилось найти способа реализовать подобное.
Другой способ - запуск отправки запросов через asyncio.as_completed() приводит к ошибке asyncpg:
asyncpg.exceptions._base.InterfaceError: cannot perform operation: another operation is in progress


В целом мне необходимо доставать из таблицы все значения столбца ids в тех строках, в которых id совпадает с одним из значений списка spisok, затем формировать из полученных значений ids новый список и повторять операцию для него.
Если бы как-то можно было попросить базу одним запросом проделать подобные итерации - это было бы наилучшим выходом в моей ситуации, однако не получается найти подобных примеров.

Прошу помощи с реализацией данной задачи
  • Вопрос задан
  • 412 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
@toddbarry Автор вопроса
Обнаружил метод Table.id.in_(spisok)
Все работает хорошо. Поэтому вопрос теперь сводится только к этому
В целом мне необходимо доставать из таблицы все значения столбца ids в тех строках, в которых id совпадает с одним из значений списка spisok, затем формировать из полученных значений ids новый список и повторять операцию для него.
Если бы как-то можно было попросить базу одним запросом проделать подобные итерации - это было бы наилучшим выходом в моей ситуации, однако не получается найти подобных примеров.


И прошу оценки использования Table.id.in_(spisok) - это хороший подход?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы