flask_sqlalchemy中filter和filter_by区别

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实现多个条件的查询:

  1. 查询用户姓名是阎秀英,并且用户的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_()一样

  2. 查询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看起来更简便

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容