Oxibital
Oxibital

Reputation: 143

SQLAlchemy - How can i filter data with kwargs? (And inside or condition)

I have conditions list that contains dictionaries such as:

conditions = [
    {"language_id": 1, "writer_level_id": 3},
    {"language_id": 2, "writer_level_id": 2},
    {"language_id": 2, "writer_level_id": 3},
    {"language_id": 1, "writer_level_id": 1},
]

I'm trying to build a query such as:

queries = []
for i in conditions:
    queries.append(
        (
            RelUserWriterLevel.language_id == i["language_id"],
            RelUserWriterLevel.writer_level_id == i["writer_level_id"],
        )
    )
data = data.filter(or_(*queries))

It doesn't work because I send tuple in this case. But I want to build an SQL like;

SELECT * FROM user WHERE (language_id = .. and writer_level_id = ..) OR (...);

So I don't know how to build AND case inside OR filtering when I need to filter with kwargs.

Topics I've researched:

In second topic, the solution works for only one case. However, in my problem I need to use it like queries = [X.y == 'a' AND X.z == 'a', ...]

And then use it like filter(or_(*queries))

I appreciate all your efforts.

Upvotes: 0

Views: 1480

Answers (1)

Oxibital
Oxibital

Reputation: 143

If anyone wonders how to solve this issue;

queries = (and_(RelUserWriterLevel.language_id==i['language_id'], RelUserWriterLevel.writer_level_id==i['writer_level_id']) for i in conditions)

data = data.filter(or_(*queries))

The detailed explanation is here : How to get rows which match a list of 3-tuples conditions with SQLAlchemy

I've solved like this!

Upvotes: 1

Related Questions