gpt4 book ai didi

python - SqlAlchemy/mysql 可选Where子句

转载 作者:太空宇宙 更新时间:2023-11-03 20:05:15 25 4
gpt4 key购买 nike

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

def _customer_resources_details(customer_id=''):

try:
res = session.query(
DbObjects.ResourceProperty.resource_id,
DivvyDbObjects.ResourceProperty.name
).filter(
DbObjects.ResourceProperty.name=='customerid'
).filter(
DbObjects.ResourceProperty.value==customer_id
).all()

return res

except Exception as e:
logger.error('_customer_resources_details ' + str(e))

因此,当传递 customer_id 时,我想通过两个过滤条件来过滤表。而且,当未传递 customer_id 时,我想仅通过第一个过滤条件来过滤表。

我也尝试过使用 AND、OR 运算符来实现所需的结果,但似乎没有任何效果

session.query(
DbObjects.ResourceProperty.resource_id,
DbObjects.ResourceProperty.name
).filter(
(
(DbObjects.ResourceProperty.name=='customerid') &
(DbObjects.ResourceProperty.value.isnot(None))
),
DbObjects.ResourceProperty.value==customer_id
).all()

我是 SqlAlchemy 新手,需要帮助来解决此问题。谢谢!

最佳答案

解决此问题的最简单方法可能是仅当 customer_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))

关于python - SqlAlchemy/mysql 可选Where子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59004227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com