gpt4 book ai didi

python - 如何在带有条件if的sqlalchemy中使用条件运算符or_?

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

现有代码片段:

if sup_usr_only:
query_ob = query_ob.filter(
or_(
and_(
Department.id.in_(login_user.department_ids), # logic is OK - checked.
model.visibility == VISIBLE_DEPT
),

and_(
model.visibility == VISIBLE_COMPANY,
model.company_id == login_user.company_id
))
)
else:
query_ob = query_ob.filter(
or_(
and_(
Department.id.in_(login_user.department_ids), # logic is OK - checked.
model.visibility == VISIBLE_DEPT
),
model.visibility == VISIBLE_GLOBAL,
and_(
model.visibility == VISIBLE_COMPANY,
model.company_id == login_user.company_id
))
)

是否有一种方法可以通过 in line if check 或任何其他优化来最小化代码片段?想要像下面这样(这在语法上是错误的):

query_ob = query_ob.filter(
or_(
and_(
Department.id.in_(login_user.department_ids),
model.visibility == VISIBLE_DEPT
),
model.visibility == VISIBLE_GLOBAL if not sup_usr_only,
and_(
model.visibility == VISIBLE_COMPANY,
model.company_id == login_user.company_id
))
)

最佳答案

您可以预先在列表中为 or_ 创建参数,然后将它们应用于 or_() 函数:

options = [
and_(
Department.id.in_(login_user.department_ids),
model.visibility == VISIBLE_DEPT
),
and_(
model.visibility == VISIBLE_COMPANY,
model.company_id == login_user.company_id
)]

if not sup_usr_only:
options.append(model.visibility == VISIBLE_GLOBAL)

query_ob = query_ob.filter(or_(*options))

对于数据库而言,OR 语句中选项的排列顺序无关紧要,但如果您觉得顺序对您的应用程序很重要,则可以使用 options.insert( 1、model.visibility == VISIBLE_GLOBAL)也是。

关于python - 如何在带有条件if的sqlalchemy中使用条件运算符or_?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36834530/

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