flask中条件查询filter和filter_by的用法
filter和filter_by区别:接收的参数类型不一样
filter方法的使用示例如下:
admins = Admin.query.filter(Admin.id==1) print(admins) 打印出的结果是sql语句: SELECT `admin`.id AS admin_id, `admin`.name AS admin_name, `admin`.pwd AS admin_pwd, `admin`.is_super AS admin_is_super, `admin`.role_id AS admin_role_id, `admin`.addtime AS admin_addtime FROM `admin` WHERE `admin`.id = %(id_1)s admins = Admin.query.filter(Admin.id==1).all() print(type(admins)) 打印出的结果为:<class list> 所以后面跟all()方法的查询语句返回值是一个列表 admins = Admin.query.filter(Admin.id==1).first() print(type(admins)) 打印出的结果为:<class app.models.Admin> 所以后面跟first()方法的查询语句返回值是模型类Admin的实例对象 注意:表示相等的比较操作符是==,而且要明确的指出id是哪个模型类的字段 查询出id值大于90的所有用户 admins=Admin.query.filter(User.id>90).all() filter的功能更强大,支持or_,in_,and_等语法。
filter_by方法的使用示例如下:
admins = Admin.query.filter_by(id=1) print(admins) 打印出的结果是sql语句: SELECT `admin`.id AS admin_id, `admin`.name AS admin_name, `admin`.pwd AS admin_pwd, `admin`.is_super AS admin_is_super, `admin`.role_id AS admin_role_id, `admin`.addtime AS admin_addtime FROM `admin` WHERE `admin`.id = %(id_1)s admins = Admin.query.filter_by(id=1).all() print(type(admins)) 打印出的结果为:<class list> 所以后面跟all()方法的查询语句返回值是一个列表 admins = Admin.query.filter_by(id=1).first() print(type(admins)) 打印出的结果为:<class app.models.Admin> 所以后面跟first()方法的查询语句返回值是模型类Admin的实例对象 注意:filter_by接受的参数是关键字参数,只支持一般的列查询,不支持比较运算符
总结:
cls.query.filter(类名.属性名 条件操作符 条件) 过滤特定条件,返回的是query对象 cls.query.filter_by(关键字参数对) 单条件查询,条件必须关键字参数,而且and连接