想实现多个条件查询,但是又有空的情况,可以用*filter_list
的方式来可选添加
# 这里按照优先级大小来进行判定
filter_list = []
# 如果什么条件都没有
if any([start_date, end_date, app_order_id, trade_no, is_handled, order_status]):
# 如果查询有时间
if start_date and end_date:
start_date = datetime.strptime(start_date, "%Y-%m-%d")
end_date += " 23:59:59"
end_date = datetime.strptime(end_date, "%Y-%m-%d %H:%M:%S")
filter_list.append(or_(and_(db.cast(CcbDanbian.pay_date, db.DATE) <= db.cast(end_date, db.DATE),
db.cast(CcbDanbian.pay_date, db.DATE) >= db.cast(start_date, db.DATE)),
and_(db.cast(CcbDanbian.refund_date, db.DATE) <= db.cast(end_date, db.DATE),
db.cast(CcbDanbian.refund_date, db.DATE) >= db.cast(start_date, db.DATE))
))
if app_order_id:
filter_list.append(CcbDanbian.app_order == app_order_id)
if trade_no:
filter_list.append(CcbDanbian.bk_order == trade_no)
if is_handled:
filter_list.append(CcbDanbian.is_handle == is_handled)
if order_status:
filter_list.append(CcbDanbian.order_status == order_status)
ccb_danbian_exist_order = db.session.query(CcbDanbian).filter(
*filter_list).order_by(
CcbDanbian.id.asc()).all()
if not ccb_danbian_exist_order:
db.session.close()
return R.fail("查询失败,没有找到日期内的银行账单!")