filter引用列名时,需要通过 模型名.属性名 的方式,比较符号用==
filter_by 的参数是 **kwargs, 指定列名时,不需要指定模型名
现在有以下User模型
class User(db.Model):
__tablename__ = "users"
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(64), unique=True)
name = db.Column(db.String(64), unique=True)
phone = db.Column(db.String(15), unique=True)
role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))
filter实现多个条件的查询:
查询用户姓名是阎秀英,并且用户的role_id=3的数据
u = User.query.filter(User.name=='阎秀英').filter(User.role_id==3).first()这里用多个filter作为多个条件的选择
u = User.query.filter(User.name=='阎秀英', User.role_id==3).first()用1个filter,多个条件中间用逗号分开,他的效果和使用and_()一样查询role_id不等于3,并且id大于10的数据
u = User.query.filter(User.role_id != 3, User.id > 10)
filter_by实现多个条件的查询
u = User.query.filter_by(name='阎秀英', role_id=3)
filter_by 只能实现按列名的单个或多个条件的and查询,filter支持的更多,如>, < , or_,in_,and_等语法。
只做等值条件的查询,filter_by看起来更简便