1、filter引用列名时,使用“类名.属性名”的方式,比较使用两个等号“==”
2、filter_by引用列名时,使用“属性名”,比较使用一个等号“=”
3、在使用多条件匹配的时候,filter需要借助sqlalchemy里的and_或者连续调用filter来实现, 而filter_by不需要,直接把多个匹配条件写在一起
4、在使用多条件匹配时,用到>=、>、<=、<,只有filter支持
举例:
1.查询id=1的表项
sql:
select * from User where id=1;
filter_by:
session.query(User).filter_by(id=1)
filter:
session.query(User).filter(User.id==1)
2.查询 name=‘Tom’ and age=16的表项
sql:
select * from User where name='Tom' and age=16;
filter_by:
filters = {’name': ‘Tom', ‘age': 16}
session.query(User).filter_by(**filters).first()
filter:
session.query(User).filter(User.name=='Tom').filter(User.age==16)
session.query(User).filter(_and(User.name=='Tom',User.age==16))
- 查询name=‘Tom’ or age=16的表项
filter_by满足不了要求,使用filter
session.query(User).filter(or(User.name=='Tom',User.age==16))
4.查询年龄大于18的表项
filter_by满足不了要求,使用filter
session.query(User).filter(User.age>18)
PS:所有的query操作都是生成orm对象,用于拼接sql语句,只有在执行first或者all操作的时候才会连接db进行事务处理