查询所有:
模型类.query.all()
~ select * from user;
查询单个:
模型类.query.get(pk) 一个pk
filter_by()和fliter()的区别
模型类.query.filter() 里面是布尔的条件
模型类.query.filter(模型名.字段名 == 值)
模型类.query.filter_by() 里面是一个等值
模型类.query.filter_by(字段名 = 值)
模块 | 语法 | 比较 | 大于小于(><)查询 | and_,or_,like,in_查询 |
---|---|---|---|---|
filter_by() | 直接用属性名(filter_by(name=‘yoyo’)) | = | 不支持 | 不支持 |
filter() | 用类名.属性名(filter(children.name==‘yoyo’) ) | == | 支持 | 支持 |
关于fliter()得到的数据类型
- 模型类.query.filter().all() -------> 列表
- 模型类.query.filter().first() -------> 对象
- User.query.filter(User.username.endswith(‘z’)).all()
select * from user where username like ‘%z’;
User.query.filter(User.username.startwith(‘z’)).all() select * from user where username like ‘z%’;
User.query.filter(User.username.contains(‘z’)).all() select * from user where username like ‘%z%’;
并且: and_ 获取: or_ 非: not_
User.query.filter(or_(User.username.like(‘z%’), User.username.contains(‘i’))).all()
select * from user where username like ‘z%’ or username like ‘%i%’
User.query.filter(and_(User.username.contains(‘i’), User.rdatetime.gt(‘2022-12-18 10:00:00’))).all()
select * from user where username like ‘%i%’ and rdatetime < ‘xxxx’
补充: gt,lt,ge(gt equal),le(le equal) ----> 通常应用在范围(整型,日期)
也可直接使用 >, < , >= , <= , !=
对于检索字段类型来说
如果要检索的字段是字符串(varchar, db.String):
User.username.startswith('')
User.username.endswith('')
User.username.contains('')
User.username.like('')
User.username.in_(['','',''])
User.username == 'zzz'
如果要检索的字段是整型或者日期类型:
User.age.__lt__(18)
User.rdatetime.__gt__('.....')
User.age.__le__(18)
User.age.__ge__(18)
User.age.between(15,30)
关于fliter_by()得到的数据类型
如果有条件的查询:
模型类.query.filter_by(字段名 = 值)
~ select * from user where 字段=值;
模型类.query.filter_by(字段名 = 值).first()
~ select * from user where 字段=值 limit;