• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

flask sqlalchemy查询多个不确定条件

武飞扬头像
bianlidou
帮助1

如下图:
学新通
用户手机号,策略类型等等都是可选,有可能只筛选一个或多个条件,这时候是不能用枚举法去写代码的,这样太多了。
然后开始找答案,有人是这样说的:链接
学新通
然后照着做了,
学新通
然后就是在filter_by的时候把引号去掉
学新通
然后,报错了。。如果是直接写进去就不会报错,也就是直接.filter_by(phone=13012345678,api_type=4001), 这样就不会报错,真是百思不得其解
然后用sqlalchemy的**or_**即可,把所有的条件的都写进去,它会帮我们筛选出有值的,代码如下:

from sqlalchemy import or_, and_, func
result1 = db.session.query(B.id, B.strategy_earn, B.total_earn,
                                               B.status, B.api_type, B.strategy_type,
                                               B.total_amount, B.create_time, B.strategy_name, B.symbol,
                                               B.strategy_earn_percent, B.total_earn_percent, B.phone).filter(func.to_date(B.create_time)==create_time, B.api_type != 6).filter(or_(B.phone==phone,B.status==status,B.symbol==symbol,B.api_type=api_type,B.strategy_type=strategy_type))

本以为这么简单,然鹅还是不行,这个or_它会把不符合条件的也筛进来。
然后问了下同事,采用了以下的方法

# 这些是接收参数
dict1 = request.args
phone = dict1.get('phone')
strategy_type = dict1.get('strategy_type')
status = dict1.get('status')
api_type = dict1.get('api_type')
symbol = dict1.get('symbol')
create_time = dict1.get('create_time')
sort_by = dict1.get('sort_by', 'create_time')
# 把筛选条件集中一起
param_list = ['phone','strategy_type','status','api_type','symbol','create_time']
result1 = db.session.query(B)
for i in param_list:
    if eval(i):  # 有值才会去filter
        if i == 'create_time':
        	# func.date是将年月日时分秒转为年月日
            result1 = result1.filter(func.date(B.create_time) == create_time)
        else:
            result1 = result1.filter(eval('B.' i) == eval(i))
学新通

这样就解决了。如果大家有更方便好用的写法,请评论告诉我

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfigihk
系列文章
更多 icon
同类精品
更多 icon
继续加载