SQLALCHEMY: выполнить массовую инструкцию SELECT - PullRequest
0 голосов
/ 14 января 2019

Я пытался отправить кучу операторов select в одну базу данных с помощью sqlalchemy, к сожалению, мой подход не увенчался успехом. Все мои запросы также обусловлены просмотром проиндексированных столбцов. Я фильтрую список различных комбинаций для условий. Вот мой нынешний подход

condition1 = [1,2,3,4,5,6,7,8,9]
condition2 = [1,2,3,4,5,6,7,8,9]

queries_collection = []

for condition_value1 in condition1:

    for condition_value2  in condition2:

        condition = and_(
                        DataModel.column1 == int(condition_value1),
                        DataModel.column2 ==  int(condition_value2))

        queries_collection.append(

           self.db.session.query(DataModel).filter(condition)

        )


self.db.session.add_all(queries_collection)
result = self.db.session.execute()

Следуя примеру использования add_all (), найденному здесь https://github.com/sqlalchemy/sqlalchemy/wiki/FilteredQuery

Как правило, можно ли сначала создать все запросы, а затем выполнить их массово?

Чего мне не хватает?

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Just

result = self.db.session.query(DataModel).\
    filter(DataModel.column1.in_(condition1),
           DataModel.column2.in_(condition2)).\
    all()

если вы ищете комбинации (продукт) условий 1 и 2.

Session.add_all() - для добавления списка ( переходных ) объектов модели в сеанс.

0 голосов
/ 14 января 2019

Сделать один запрос, а не список запросов

query = db.session.query(DataModel)

for condition_value1 in condition1:

    for condition_value2  in condition2:

        condition = and_(
                    DataModel.column1 == int(condition_value1[0]),
                    DataModel.column2 ==  int(condition_value2[0])

        )

    query = query.filter(condition)

result = query.all()
...