Flask框架从入门到精通之模型查询(十三)

栏目: Python · 发布时间: 5年前

内容简介:其实我们对模型的主要操作就是查询,在Flask-SQLAlchemy中,支持了很多的查询方法。查询操作是通过query对象操作数据。最基本的查询是返回表中所有数据,可以通过过滤器进行更精确的数据库查询。Flask-SQLAlchemy中常用过滤器:Flask-SQLAlchemy中常用执行器:

其实我们对模型的主要操作就是查询,在Flask-SQLAlchemy中,支持了很多的查询方法。查询操作是通过query对象操作数据。最基本的查询是返回表中所有数据,可以通过过滤器进行更精确的数据库查询。

二、查询过滤器

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()
#[<Type 4>, <Type 2>, <Type 1>, <Type 3>]
复制代码
Hero.query.all()
#[<Hero 1>, <Hero 2>, <Hero 3>, <Hero 4>, <Hero 5>]
复制代码
  • 根据主键查询
Hero.query.get(1)
 # <Hero 1>
复制代码
  • 查询第一条
Hero.query.first()
#   <Hero 1>
复制代码
  • 根据名字过滤
# 查询名字是王昭君的对象
 Hero.query.filter_by(name='王昭君').all()
 # [<Hero 3>]
 Hero.query.filter_by(name='王昭君').first()
 # <Hero 3>
复制代码
  • 逻辑与
# 查询名字以君结尾并且type_id等于3的
Hero.query.filter_by(name='王昭君',type_id=3).first()
# <Hero 3>
复制代码
  • filter的逻辑与
# 查询名字以君结尾并且type_id等于3的
# filter_by是=号,在filter中是==号 
# filter_by不需要指定类名,filter需要指定 
Hero.query.filter(Hero.name=='王昭君',Hero.type_id==3).first()
# <Hero 3>
复制代码
  • 逻辑或
# 查询名字以君结尾或type_id等于3的
from sqlalchemy import or_
Hero.query.filter(or_(Hero.name.endswith('君'),Hero.type_id==3)).all()
#  [<Hero 3>, <Hero 4>]
复制代码
  • 偏移查询
# 跳过前2条数据,从第三条数据开始取全部
Hero.query.offset(2).all()
# [<Hero 3>, <Hero 4>, <Hero 5>]

# 跳过前2条数据,从第三条数据开始取2条
Hero.query.offset(2).limit(2).all()
#[<Hero 3>, <Hero 4>]
复制代码
  • 排序
#降序查询
Hero.query.order_by(Hero.id.desc()).all()
# [<Hero 5>, <Hero 4>, <Hero 3>, <Hero 2>, <Hero 1>]

#升序查询
Hero.query.order_by(Hero.id.asc()).all()
# [<Hero 1>, <Hero 2>, <Hero 3>, <Hero 4>, <Hero 5>]
复制代码
  • 分组
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 1>

type = Type.query.get(1)
type.heros
# [<Hero 1>]
复制代码

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

def __repr__(self):
        return self.name
复制代码

在进行查询:

type = Type.query.get(1)
type.heros
# [后羿]
复制代码

欢迎关注我的公众号:

Flask框架从入门到精通之模型查询(十三)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

精通正则表达式

精通正则表达式

[美] Jeffrey E.F.Friedl / 余晟 / 电子工业出版社 / 2012-7 / 89.00元

《精通正则表达式(第3版)》内容简介:随着互联网的迅速发展,几乎所有工具软件和程序语言都支持的正则表达式也变得越来越强大和易于使用。《精通正则表达式(第3版)》是讲解正则表达式的经典之作。《精通正则表达式(第3版)》主要讲解了正则表达式的特性和流派、匹配原理、优化原则、实用诀窍以及调校措施,并详细介绍了正则表达式在Perl、Java、.NET、PHP中的用法。《精通正则表达式(第3版)》自第1版开......一起来看看 《精通正则表达式》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具