flask sqlalchemy查询多个不确定条件
如下图:
用户手机号,策略类型等等都是可选,有可能只筛选一个或多个条件,这时候是不能用枚举法去写代码的,这样太多了。
然后开始找答案,有人是这样说的:链接
然后照着做了,
然后就是在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
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13