需求:使用 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()
以上代碼有個數據層面的問題,如果數據庫中有 字段為空值的,那麼是查不到的.