Reputation: 143
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
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