Flask 框架(6)查询器

查询过滤器

Flask-SQLAlchemy中常用过滤器:

filter()  把过滤器添加到原查询上,返回一个新查询
filter_by()  把等值过滤器添加到原查询上,  返回一个新查询
limit()  使用指定的值限定原查询返回的结果
offset()  偏移原查询返回的结果,   返回一个新查询
order_by()  根据指定条件对原查询结果进行排序,返回一个新查询
group_by()   根据指定条件对原查询结果进行分组,返回一个新查询

查询执行器

Flask-SQLAlchemy中常用执行器:

all()   以列表形式返回查询的所有结果
first()  返回查询的第一个结果,如果未查到,返回None
first_or_404()返回查询的第一个结果,如果未查到,返回404
get()返回指定主键对应的行,如不存在,返回None
get_or_404()返回指定主键对应的行,如不存在,返回404
count()返回查询结果的数量
paginate()返回一个Paginate对象,它包含指定范围内的结果

查询

我们在ipython3中测试:

from flask_db import *

查询全部

Type.query.all()
Hero.query.all()

根据主键查询

Hero.query.get(1)

查询第一条

Hero.query.first()

根据名字过滤

# 查询名字是王昭君的对象
 Hero.query.filter_by(name='王昭君').all()
 Hero.query.filter_by(name='王昭君').first()

逻辑与

# 查询名字以君结尾并且type_id等于3的
 Hero.query.filter_by(name='王昭君',type_id=3).first()

filter的逻辑与

# 查询名字以君结尾并且type_id等于3的 # filter_by是=号,
在filter中是==号 # filter_by不需要指定类名,filter需要指定 
Hero.query.filter(Hero.name=='王昭君',Hero.type_id==3).first()

逻辑或

# 查询名字以君结尾或type_id等于3的
 from sqlalchemy import or_
  Hero.query.filter(or_(Hero.name.endswith('君'),Hero.type_id==3)).all()

偏移查询

# 跳过前2条数据,从第三条数据开始取全部 
Hero.query.offset(2).all()
# 跳过前2条数据,从第三条数据开始取2条 
Hero.query.offset(2).limit(2).all()

排序

#降序查询
 Hero.query.order_by(Hero.id.desc()).all()
 #升序查询
Hero.query.order_by(Hero.id.asc()).all()

分组

from sqlalchemy import func # 根据type_id进行分组统计 db.session.query(Hero.type_id,func.count(Hero.type_id)).group_by(Hero.type_id).all()

关联查询

hero = Hero.query.get(1) 
hero.type

type = Type.query.get(1) 
type.heros

如果想让查询的过程中显示出自定义信息。可以在模型类中重写__repr__方法。例如我在两个模型加上如下代码:

def __repr__(self):
 return self.name

在进行查询:

type = Type.query.get(1) 
type.heros

更新

第一种

hero = Hero.query.get(1) 
hero.name = '伽罗' 
db.session.add(hero) 
db.session.commit()

第二种

Hero.query.filter_by(id=1).update({"name":"虞姬","gender":"女"}) db.session.commit()

删除

hero = Hero.query.get(4)
 db.session.delete(hero) 
 db.session.commit()
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值