课程网站开发与设计,wordpress 发文章漏洞,如何免费制作一个公司网站,h5企业网站通用源码filter_by() 和 filter() 的最主要的区别#xff1a;
模块语法#xff08;大于和小于#xff09;查询and_和or_查询filter_by()直接用属性名#xff0c;比较用不支持不支持filter()用类名.属性名#xff0c;比较用支持支持
谈 filter_by() 的语法之前先看下 filt…filter_by() 和 filter() 的最主要的区别
模块语法大于和小于查询and_和or_查询filter_by()直接用属性名比较用不支持不支持filter()用类名.属性名比较用支持支持
谈 filter_by() 的语法之前先看下 filter_by() 的内部源码,去掉注释之后如下: def filter_by(self, **kwargs):clauses [_entity_descriptor(self._joinpoint_zero(), key) valuefor key, value in kwargs.items()]return self.filter(sql.and_(*clauses))可以看出filter_by() 只接受键值对参数所以 filter_by() 不支持大于和小于和 and_、or_查询 user表
filter_by() 查询 user 表里面名字等于 Tom 的 db.session.query(User).filter_by(nameTom).all() 查询 user 表里面名字等于 Tom 并且年龄等于 18 db.session.query(User).filter_by(nameTom, age18).all() 比如新的需求查询 user 表里面名字等于 Tom 或者年龄等于 18 的用户那么 filter_by() 就满足不了要求了
filter() 查询 user 表里面名字等于 Tom 的 db.session.query(User).filter(User.name Tom).all() 查询 user 表里面名字等于 Tom 并且年龄等于 18 db.session.query(User).filter(User.name Tom, User.age 18).all() 也可以这样 db.session.query(User).filter(User.name Tom.filter(User.age 18).all() 如果想使用 and 拼接需要用以下方式 db.session.query(User).filter(and_(User.name Tom, User.age 18)).all() 以下的方式 and 后面的 User.age 18 不会生效 db.session.query(User).filter(User.name Tom and User.age 18).all() 查询 user 表里面名字等于 Tom 的或者年龄等于 18 db.session.query(User).filter(or_(User.name Tom, User.age 18)).all() 查询 user 表里面名字等于 Tom 的并且年龄大于 18 db.session.query(User).filter(User.name Tom, User.age 18).all() 查询 name 中包含字母 a 的所有数据(模糊查询) db.session.query(User).filter(User.name.like(%{0}%.format(a))).all()
以上的例子都是查询中使用比较多的使用方面看大家喜好filter_by() 对组合查询等等支持的不是很好但是语法相对 filter() 简洁一些 另外 filter() 还有很多其他的查询大家可以自己去多多探讨。。。
笔记 现在有 mysql 的 user 数据库表存储内容如下图下面通过例子来说明两种查询方式的用法
在一个用户的模型类中, 要查询id为5的一个用户;
User.query.filter(User.id5).all() # 使用filter 中必须指定那个 模型类.id5;
User.query.filter(User.id5).first() # all() , first() ,都是查询执行器 , 一个返回列表包含对象, 一个直接返回对象;
User.query.filter_by(id5).first() # filter_by默认就是使用id 进行查询 , 写法为id5; 不可以使用; 也不用模型类.id的方式; 它是一种更加精确的查询; # users User.query.filter_by(isdeleteFalse).all() 用等值符号 # users User.query.filter(User.isdelete False, User.phone.startswith(150)).order_by(-User.rdatetime) 用关系符号 升序降序正负号 users User.query.filter(or_(User.usernamesearch, User.phone search)).all() # select * from user where usernamesearch or phonesearch number User.query.filter(or_(User.usernamesearch,User.phone search)).count() users User.query.filter(or_(User.username.like(% search %), User.phone search)).all() #返回的是列表 number User.query.filter(or_(User.username.like(search), User.phone search)).count() a hrefjavascript:0; onclickdel({{user.id}})删除/a 跳过hrf 执行js脚本