需要:应用 sqlalchemy 进行多条件查问时,当某个条件为空就疏忽该条件.

知识点:

  • filter 应用 or_ 来进行 的运算;
  • func 能够进行 总量统计.

代码性能点:

  • 如果 user_id 有值则取传来的值;如果没有传值,则查问 user_id 不为空的所有数据;
  • 如果 state 有值则取传来的值;如果没有传值,则查问 state 不为空的所有数据;

实现代码:

from operator import or_from sqlalchemy import text, funcloan_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()

以上代码有个数据层面的问题,如果数据库中有 字段为空值的,那么是查不到的.