[英]How to use conditional operator or_ in sqlalchemy with conditional if?
現有代碼段:
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
))
)
如果有檢查或任何其他優化,我可以通過一種方式最小化代碼片段嗎? 想要在下面做這個(這在語法上是錯誤的):
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_
的參數,然后將它們應用於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)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.