lbfeng
V2EX  ›  Flask

sqlalchemy 合并 query 实现

  •  
  •   lbfeng · Mar 10, 2017 · 5079 views
    This topic created in 3351 days ago, the information mentioned may be changed or developed.
    q_1 = Table.query.filter(Table.status==True, or_(Table.user_id == user_2.id, Table.size>10))
    q_2 = Table.query.filter(Table.date > date, or_(Table.user_id == user_1.id, Table.size<8))
    

    两个不同的 query 返回的是满足不同条件的样的 table objects ,能不能合并成一个 query ,可能加 pagination 。 试了 union 和 or_都不行。

    7 replies    2017-04-02 14:54:50 +08:00
    xyjtou
        1
    xyjtou  
       Mar 10, 2017 via Android   ❤️ 1
    方法 1 :如果是同一个 table ,需要用 alias 。

    方法 2 :分多次把符合条件的 table.id 做成一个 list ,再 filter in list 一次。
    mxi1
        2
    mxi1  
       Mar 10, 2017 via iPhone
    好久不用了,不过印象里 sqlalchemy 有专门的介绍。刚查了一下,可以用在 filter 里面使用 or_。 像这种: filter(or_(User.name=='Ed', User.name=='Tom'))
    mxi1
        3
    mxi1  
       Mar 10, 2017 via iPhone
    抱歉,问题没看全。关于 Table 对象的操作没有做过。😓
    lbfeng
        4
    lbfeng  
    OP
       Mar 27, 2017
    @xyjtou 之前采用了方法 2 。最近这个问题又出现了。感觉方法二不够好。
    ```
    query_1 = T1.query.filter(T1.attr_1 == value1, T1.attr_2 == T2.attr, T2.attr == value_2)
    query_2 = T1.query.filter(T1.attr_1 == value3, T1.attr_3 == T4.attr, T3.attr == value_4)
    ```

    ```
    T1.query.filter(_or((T1.attr_1 == value1, T1.attr_2 == T2.attr, T2.attr == value_2),
    (T1.attr_1 == value3, T1.attr_3 == T4.attr, T3.attr == value_4))
    ```
    这样又会出错。
    lbfeng
        5
    lbfeng  
    OP
       Mar 27, 2017
    好吧,我想多了。 query_1.union(query_2)就可以。
    MrBetterman
        6
    MrBetterman  
       Apr 2, 2017
    我想问一下 sqlalchemy 中怎么加占位符
    orm.Rent.query.filter(orm.Rent.title.like('%%s%',q)).all()
    MrBetterman
        7
    MrBetterman  
       Apr 2, 2017
    我想问一下 sqlalchemy 中怎么加占位符
    orm.Rent.query.filter(orm.Rent.title.like('%%s%',q)).all() 其中 q 是变量,不知道为什么就一直中断
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3368 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 11:21 · PVG 19:21 · LAX 04:21 · JFK 07:21
    ♥ Do have faith in what you're doing.