【问题标题】:SQLAlchemy: avoid query filter if searched value is NoneSQLAlchemy:如果搜索值为无,则避免查询过滤器
【发布时间】:2014-04-01 20:11:31
【问题描述】:

是否有单线可以处理以下场景:

def queryByAttr(attr1,attr2=None):
  if attr2 is None:
    session.query(Foo).filter(Foo.attr1==attr1)
  else:
    session.query(Foo).filter(Foo.attr1==attr1).filter(Foo.attr2==attr2)

【问题讨论】:

    标签: python sqlalchemy


    【解决方案1】:

    有一个更易读的multi-liner使用链接:

    def queryByAttr(attr1, attr2=None):
        q = session.query(Foo).filter(Foo.attr1==attr1)
        if not(attr2 is None):
            q = q.filter(Foo.attr2==attr2)
        return q
    

    你也可以把它做成一个(相当长的)单线

    def queryByAttr(attr1, attr2=None):
        return (session.query(Foo).filter(Foo.attr1==attr1)) if (attr2 is None) else (session.query(Foo).filter(Foo.attr1==attr1).filter(Foo.attr2==attr2))
    

    所有这一切都假设您永远不需要查询来返回那些具有attr2NULLFoos。

    【讨论】:

      【解决方案2】:

      也可以使用。

      def queryByAttr(attr1, attr2=None):
          return (session.query(Foo).filter((*[Foo.attr1==attr1, Foo.attr2==attr2] if attr2 else *[Foo.attr1==attr1])))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-14
        • 2020-02-29
        • 1970-01-01
        相关资源
        最近更新 更多