简体   繁体   English

SQLAlchemy - 如何使用 kwargs 过滤数据? (和内部或条件)

[英]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;但我想构建一个类似的 SQL;

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 .因此,当我需要使用kwargs过滤时,我不知道如何在 OR 过滤中构建 AND 案例。

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 = [Xy == 'a' AND Xz == 'a', ...]但是,在我的问题中,我需要像queries = [Xy == 'a' AND Xz == 'a', ...]

And then use it like filter(or_(*queries))然后像filter(or_(*queries))一样使用它

I appreciate all your efforts.我感谢你所有的努力。

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详细说明在这里: How to get rows which match a list of 3-tuples conditions with SQLAlchemy

I've solved like this!我是这样解决的!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM