【问题标题】:Querying in SQL Alchemy Using Conjuctions在 SQLAlchemy 中使用连词查询
【发布时间】:2015-08-14 16:42:30
【问题描述】:

我正在尝试获取字符串列表并根据列表中所有字符串的组合或组合进行查询。我想知道这样的事情是否可以在下面完成。

def filters(self,filter_company = ["DPL"]):
print "TEST"
        # Company Filter
        company_conj = 1        ## Bitwise 1 with AND will not effect other AND bits
        for c in filter_company:
            company_conj = (company_conj) & (Exception.company == c)            ## Create co


    qrty_exceptions = session.query(Exception).filter(company_conj)         ## Query by conjunction

所以基本上,我正在遍历列表中的每个项目并尝试通过连接来进行连接。关键是我不知道列表中有多少项目......但我想在逻辑上按位将它们组合在一起,以便它们都形成合取。我最终收到以下错误:

TypeError: &: 'int' 和 BinaryExpression 的操作数类型不受支持

实际上,我的意思不是用按位或符号来写这个...“|”但我想如果你可以为 AND 做到这一点,那么它也应该适用于 OR。

【问题讨论】:

    标签: python sql sqlalchemy conjunctive-normal-form


    【解决方案1】:

    我认为下面的示例应该对您有所帮助:

    from sqlalchemy import or_, and_
    
    company_filters = ["Filter1", "Filter2"]  # as many as you like
    
    clauses = [(Exception.company == c) for c in company_filters]
    q = session.query(Exception)
    q = q.filter(and_(*clauses))  # or `or_(*clauses)`
    

    【讨论】:

    • 谢谢。这行得通,我最终将其扩展到:q = q.filter(and_(or_(*clauses),or_(*other_clauses)))。我从来没有想过使用星号多个参数的符号来传递多个参数。
    猜你喜欢
    • 2023-03-18
    • 2017-03-17
    • 1970-01-01
    • 2017-04-18
    • 1970-01-01
    • 2019-12-13
    • 1970-01-01
    • 1970-01-01
    • 2018-06-18
    相关资源
    最近更新 更多