Python SqlAlchemy/mysql可选Where子句

Python SqlAlchemy/mysql可选Where子句,python,sqlalchemy,Python,Sqlalchemy,我在下面提到了带有可选参数的方法: def\u客户资源详细信息(客户id=“”): 尝试: res=session.query( DbObjects.ResourceProperty.resource\u id, DivyDBObjects.ResourceProperty.name ).过滤器( DbObjects.ResourceProperty.name=='customerid' ).过滤器( DbObjects.ResourceProperty.value==customer\u id

我在下面提到了带有可选参数的方法:

def\u客户资源详细信息(客户id=“”):
尝试:
res=session.query(
DbObjects.ResourceProperty.resource\u id,
DivyDBObjects.ResourceProperty.name
).过滤器(
DbObjects.ResourceProperty.name=='customerid'
).过滤器(
DbObjects.ResourceProperty.value==customer\u id
).all()
返回res
例外情况除外,如e:
记录器错误(“客户资源详细信息”+str(e))
因此,当传递
customer\u id
时,我希望根据这两个过滤条件过滤表。而且,当
customer\u id
未通过时,我只想根据第一个筛选条件筛选表

我也尝试使用AND、OR运算符来达到预期的效果,但似乎没有任何效果

session.query(
divvydboobjects.ResourceProperty.resource\u id,
DivyDBObjects.ResourceProperty.name
).过滤器(
(
(DivyDBObjects.ResourceProperty.name=='customerid')&
(DivyDBObject.ResourceProperty.value.isnot(无))
),
divvydboobjects.ResourceProperty.value==customer\u id
).all()
我是SqlAlchemy新手,需要帮助解决这个问题。
谢谢大家!

解决此问题的最简单方法可能是仅当
customer\u id
不为空时才运行第二个筛选方法:

def _customer_resources_details(customer_id=''):
    try:
        q = session.query(
            DbObjects.ResourceProperty.resource_id,
            DivvyDbObjects.ResourceProperty.name
        ).filter(DbObjects.ResourceProperty.name =='customerid')
        if customer_id:
            q = q.filter(DbObjects.ResourceProperty.value == customer_id)
        return q.all()
    except Exception as e:
        logger.error('_customer_resources_details ' + str(e))

可能最简单的方法是仅当
customer\u id
不为空时才运行第二个筛选方法:

def _customer_resources_details(customer_id=''):
    try:
        q = session.query(
            DbObjects.ResourceProperty.resource_id,
            DivvyDbObjects.ResourceProperty.name
        ).filter(DbObjects.ResourceProperty.name =='customerid')
        if customer_id:
            q = q.filter(DbObjects.ResourceProperty.value == customer_id)
        return q.all()
    except Exception as e:
        logger.error('_customer_resources_details ' + str(e))