SQLalchemy选择all with optional属性

时间:2018-02-08 13:27:50

标签: python mysql sqlalchemy

使用SQLalchemy我查询我的数据库。我能够用这样的东西选择所有多行/对象:

def selectAllObjects():
    objects = session.query(Object).all()

但是,我想构建一个函数来检查是否有任何约束,如果包含这些约束。所以我在考虑以下几点:

def selectAllObjects(attribute1="default",attribute2="default"):
    if attribute1 != "default" and attribute2 != default:
        objects = session.query(Object).filter_by(attribute1=attribute1,
                  attribute2=attribute2).all()
    elif attribute1 != "default":
        objects = session.query(Object).filter_by(attribute1=attribute1).all()
    ...etc, etc...

正如你所看到的,当属性数量增加时,这变得非常难看。什么是pythonic方法呢?

1 个答案:

答案 0 :(得分:0)

Query个对象可以链接起来,来自docs

  

查询是根据给定的Session生成的,使用query()   方法:

     

q = session.query(SomeMappedClass)

所以你可以这样写:

def selectAllObjects(attribute1="default", attribute2="default"):
    query = session.query(Object)
    if attribute1 != "default" and attribute2 != "default":
        query = query.filter_by(
            attribute1=attribute1,
            attribute2=attribute2,
        )
    elif attribute1 != "default":
        query = query.filter_by(attribute1=attribute1)
    return query.all()