需求:使用 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()

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


飘雪的浮云
54 声望1 粉丝