Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SQLALCHEMY: Perform bulk SELECT statement

I was trying to send a bunch of select statements to a single database using sqlalchemy unfortunately, my approach did not succeed. All my queries are also conditioned to look into indexed columns. I filter on a list of different combinations for the conditions. Here is my current approach

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()

Following an example of how to use add_all() found here https://github.com/sqlalchemy/sqlalchemy/wiki/FilteredQuery

Generally, can I first create all queries and then execute them in bulk?

What am I missing?

like image 943
harryb Avatar asked Oct 27 '25 06:10

harryb


2 Answers

Just

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

if you're looking for combinations (product) of conditions 1 & 2.

Session.add_all() is for adding a list of (transient) model objects to the session.

like image 63
Ilja Everilä Avatar answered Oct 29 '25 05:10

Ilja Everilä


Make one query rather than a list of queries

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()
like image 35
Tobey Avatar answered Oct 29 '25 07:10

Tobey



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!