博客 / 詳情

返回

sqlalchemy 使用 filter 多條件查詢:當某個條件為空時就忽略該條件

需求:使用 sqlalchemy 進行多條件查詢時,當某個條件為空就忽略該條件.

知識點:

  • filter 使用 or_ 來進行 的運算;
  • func 可以進行 總量統計.

代碼功能點:

  • 如果 user_id 有值則取傳來的值;如果沒有傳值,則查詢 user_id 不為空的所有數據;
  • 如果 state 有值則取傳來的值;如果沒有傳值,則查詢 state 不為空的所有數據;

實現代碼:

from operator import or_
from sqlalchemy import text, func

loan_output = db.query(self.model).filter(or_(Loan.user_id == user_id, Loan.user_id != None), or_(Loan.state == state, Loan.state != None)).order_by().all()

# 獲取符合條件的總數據量
count = db.query(func.count(Loan.id)).filter(or_(Loan.user_id == user_id, Loan.user_id != None), or_(Loan.state == state, Loan.state != None)).scalar()

以上代碼有個數據層面的問題,如果數據庫中有 字段為空值的,那麼是查不到的.

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.