首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Flask SQLAlchemy查询:从自身外键关系中过滤记录

Flask SQLAlchemy是一个基于Python的轻量级Web框架Flask的扩展,用于简化与数据库的交互。它提供了一种方便的方式来定义数据库模型,并且可以使用SQLAlchemy进行数据库查询。

在Flask SQLAlchemy中,可以通过定义模型类和它们之间的关系来建立数据库模型。当模型类之间存在外键关系时,可以使用这些关系来过滤记录。

要从自身外键关系中过滤记录,可以使用filter_by()filter()方法。这些方法可以接受模型类的属性作为参数,并返回符合条件的记录。

下面是一个示例,假设有两个模型类User和Post,它们之间存在一对多的关系,即一个用户可以拥有多个帖子:

代码语言:txt
复制
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50))
    posts = db.relationship('Post', backref='user', lazy=True)

class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100))
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))

# 假设已经创建了Flask应用和数据库连接

# 从User模型中过滤出名字为"John"的用户的所有帖子
user = User.query.filter_by(name='John').first()
posts = user.posts

# 从Post模型中过滤出标题包含"Flask"的帖子,并获取对应的用户
posts = Post.query.filter(Post.title.like('%Flask%')).all()
users = [post.user for post in posts]

在上面的示例中,filter_by()方法用于从User模型中过滤出名字为"John"的用户,然后通过访问user.posts属性获取该用户的所有帖子。filter()方法用于从Post模型中过滤出标题包含"Flask"的帖子,并通过访问post.user属性获取对应的用户。

对于Flask SQLAlchemy的更多详细信息和用法,请参考腾讯云的相关产品文档:Flask SQLAlchemy

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Flask数据库过滤器与查询

在一对多关系,要在多这一侧加入一个外,指向一这一侧联接的记录,即relationship()声明出现在代表少那个类,而外声明出现在代表多的那个类。...只在模棱两可的关系需要指定 lazy:决定了SQLAlchemy什么时候数据库中加载数据。...dynamic(不加载记录,但提供加载记录查询) uselist:如果设为Fales,表示一对一关系 order_by:指定关系记录的排序方式 secondary:指定多对多关系关系表的名字 secondaryjoin...一对多关系,一对一关系至少有一侧是单个实体,所以记录之间的联系可以通过外来实现,让外键指向这个实体。...如果关系的两侧都在同一个表,这种关系称为引用关系。在关注关系的左侧是用户实体,称为”关注者”;右侧也是用户实体,称为”被关注者”。

6.9K10

Flask_数据库

join 明确指定两个模型之间使用的联结条件 uselist 如果为False,不使用列表,而使用标量值 order_by 指定关系记录的排序方式 secondary 指定多对多关系关系表的名字...secondary join 在SQLAlchemy无法自行决定时,指定多对多关系的二级联结条件 数据库的基本操作 Flask-SQLAlchemy,插入/修改/删除等操作,均有数据库会话管理....在准备把数据写入数据库前,要先把数据添加到会话,然后调用commit()方法提交会话 Flask-SQLAlchemy,查询操作通过query 对象操作....最基本的查询是返回表的所有数据,可以通过过滤器进行更精确的数据库查询....查询过滤过滤器 说明 filter() 把过滤器添加到原查询上,返回一个新查询 filter_by() 把等值过滤器添加到原查询上,返回一个新查询 limit 使用指定的值限定原查询返回的结果 offset

1.3K50
  • flask数据操纵

    Flask ORM 在Django框架内部已经提供ORM这样的框架,来实现对象关系映射,方便我们操作数据库。如果想在Flask也达到这样效果,需要安装一个第三方来支持。...SQLAlchemy是一个关系型数据库框架,它提供了高层的ORM和底层的原生数据库的操作。flask-sqlalchemy是一个简化了SQLAlchemy操作的flask扩展。...join 明确指定两个模型之间使用的联结条件 uselist 如果为False,不使用列表,而使用标量值 order_by 指定关系记录的排序方式 secondary 指定多对多记录的排序方式 secondary...join 在SQLAlchemy无法自行决定时,指定多对多关系的二级联结 创建 在Flask-SQLAlchemy,插入、修改、删除操作,均由数据库会话管理。...Flask-SQLAlchemy中常用过滤器: 过滤器 说明 filter() 把过滤器添加到原查询上,返回一个新查询 filter_by() 把等值过滤器添加到原查询上,返回一个新查询 limit

    1.3K10

    【一周掌握Flask框架学习笔记】Flask中使用数据库(使用Flask-SQLAlchemy管理数据库)

    。...join 明确指定两个模型之间使用的联结条件 uselist 如果为False,不使用列表,而使用标量值 order_by 指定关系记录的排序方式 secondary 指定多对多记录的排序方式 secondary...join 在SQLAlchemy无法自行决定时,指定多对多关系的二级联结条件backref 在关系的另一模型添加反向引用 primary join 明确指定两个模型之间使用的联结条件 uselist...如果为False,不使用列表,而使用标量值 order_by 指定关系记录的排序方式 secondary 指定多对多记录的排序方式 secondary join 在SQLAlchemy无法自行决定时...基本概念 1.1 常用的SQLAlchemy查询过滤过滤器 说明 filter() 把过滤器添加到原查询上,返回一个新查询 filter_by() 把等值过滤器添加到原查询上,返回一个新查询 limit

    4.3K20

    Flask数据库

    数据库连接通过URL指定,而且程序使用的数据库必须保存到Flask配置对象的SQLALCHEMY_DATABASE_URI。...join 明确指定两个模型之间使用的联结条件 uselist 如果为False,不使用列表,而使用标量值 order_by 指定关系记录的排序方式 secondary 指定多对多记录的排序方式 secondary...join 在SQLAlchemy无法自行决定时,指定多对多关系的二级联结条件 二 自定义模型类 模型表示程序使用的数据实体,在Flask-SQLAlchemy,模型一般是Python类,继承...在Flask-SQLAlchemy查询操作是通过query对象操作数据。最基本的查询是返回表中所有数据,可以通过过滤器进行更精确的数据库查询。...: 常用的SQLAlchemy查询过滤过滤器 说明 filter() 把过滤器添加到原查询上,返回一个新查询 filter_by() 把等值过滤器添加到原查询上,返回一个新查询 limit 使用指定的值限定原查询返回的结果

    3K20

    Flask入门第三天

    Flask配置对象的 **SQLALCHEMY_DATABASE_URI** app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:mysql...在1查多的 primary join:明确指定两个模型之间使用的联结条件 uselist:如果为False,不使用列表,而使用标量值 order_by:指定关系记录的排序方式 secondary:指定多对多关系关系表的名字...secondary join:在SQLAlchemy无法自行决定时,指定多对多关系的二级联结条件   3,数据库基本操作 在Flask-SQLAlchemy,插入、修改、删除操作,均由数据库会话管理...在此文中,第一个参数为对应参照的类"User" 第二个参数backref为类User申明新属性的方法 第三个参数lazy决定了什么时候SQLALchemy数据库中加载数据 如果设置为子查询方式(subquery...查询过滤器 filter():把过滤器添加到原查询上,返回一个新查询 filter_by():把等值过滤器添加到原查询上,返回一个新查询 limit():使用指定的值限定原查询返回的结果 offset(

    2.7K20

    Flask-SQLAlchemy操作数据库

    SQLAlchemy是一个关系型数据库框架,它提供了高层的 ORM 和底层的原生数据库的操作。flask-sqlalchemy 是一个简化了 SQLAlchemy 操作的flask扩展。...配置对象的 **SQLALCHEMY_DATABASE_URI** app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:123456@...,用于设置外键名称,在1查多的 primary join 明确指定两个模型之间使用的联结条件 uselist 如果为False,不使用列表,而使用标量值 order_by 指定关系记录的排序方式 secondary...指定多对多关系关系表的名字 secondary join 在SQLAlchemy无法自行决定时,指定多对多关系的二级联结条件 数据库基本操作 - 在Flask-SQLAlchemy,插入、修改...常用的SQLAlchemy查询过滤过滤器 说明 filter() 把过滤器添加到原查询上,返回一个新查询 filter_by() 把等值过滤器添加到原查询上,返回一个新查询 limit() 使用指定的值限定原查询返回的结果

    1.5K20

    小记 - Flask基础

    NoneOf 验证输入值不在可选列表 插件-数据库-SQLAlchemy SQLAlchemy是一个关系型数据库框架,它提供了高层ORM和底层的原生数据库操作,Flask-sqlalchemy是一个简化了的...在Flask-SQLAlchemy,数据库使用URL指定,而且程序使用的数据库必须保存到Flask配置对象的SQLALCHEMY_DATABASE_URI 数据库类型://数据库账号:密码@地址...用户A 2 实现数据模型 通过class实现,继承db.Model 定义表名:__tablename__ 定义字段:db.Column(字段类型, 列选项) 指定外:db.ForeignKey(...() 返回一个Paginate对象,它包含指定范围内的结果 查询过滤过滤器 说明 filter(对象.属性==值) 把过滤器添加到原查询上,返回一个新查询。...,返回一个新查询 group_by() 根据指定条件对原查询进行分组,返回一个新查询 关系引用 有时候需要一些属性方便查询数据,但是这些属性不能出现在数据库的字段 relationship():sqlalchemy

    2.9K10

    Flask 入门系列教程(五)

    数据库按照一定规则保存程序数据,程序再发起查询取回所需的数据。Web 程序最常用基于关系模型的数据库,这种数据库也称为 SQL 数据库,因为它们使用结构化查询语言。...对象 SQLALCHEMY_DATABASE_URI ,配置对象还有一个很有用的选项,即 SQLALCHEMY_COMMIT_ON_TEARDOWN ,将其设为 True 时,每次请求结束后都会自动提交数据库的变动...这一属性可替代 role_id 访问 Role 模型,此时获取的是模型对象,而不是外的值。 添加到 User 模型的 role_id 列被定义为外,就是这个外建立起了关系。...在查询上应用指定的过滤器后,通过调用 all() 执行查询,以列表的形式返回结果。除了all() 之外,还有其他方法能触发查询执行。...,我们就留到后面的内容慢慢学习吧 这部分完整代码,可以检出5a 总结 本节我们学习了数据库相关的内容, SQLAlchemyflask_SQLAlchemy,以及如何在视图函数中使用,还有更加方便的迁移数据库等等知识

    3.2K31

    Flask 操作Mysql数据库 - flask-sqlalchemy扩展

    官网文档 https://flask-sqlalchemy.palletsprojects.com/en/master/quickstart/ 数据库的设置 Web应用普遍使用的是关系模型的数据库,关系型数据库把所有的数据都存储在表...数据库连接通过URL指定,而且程序使用的数据库必须保存到Flask配置对象的SQLALCHEMY_DATABASE_URI。...join 明确指定两个模型之间使用的联结条件 uselist 如果为False,不使用列表,而使用标量值 order_by 指定关系记录的排序方式 secondary 指定多对多记录的排序方式 secondary...在Flask-SQLAlchemy查询操作是通过query对象操作数据。最基本的查询是返回表中所有数据,可以通过过滤器进行更精确的数据库查询。 下面先来创建两个表的数据模型:用户表和角色表。...常用的SQLAlchemy查询过滤过滤器 说明 filter() 把过滤器添加到原查询上,返回一个新查询 filter_by() 把等值过滤器添加到原查询上,返回一个新查询 limit 使用指定的值限定原查询返回的结果

    5.4K20

    Flask入门到放弃(四)—— 数据库

    ,在1查多的 primary join 明确指定两个模型之间使用的连表条件 uselist 如果为False,不使用列表,而使用标量值 order_by 指定关系记录的排序方式 secondary 指定多对多关系关系表的名字...secondary join 在SQLAlchemy无法自行决定时,指定多对多关系的二级连表条件 数据库基本操作 在Flask-SQLAlchemy,插入、修改、删除操作,均由数据库会话管理。...在准备把数据写入数据库前,要先将数据添加到会话然后调用 commit() 方法提交会话。 在 Flask-SQLAlchemy 查询操作是通过 query 对象操作数据。...最基本的查询是返回表中所有数据,可以通过过滤器进行更精确的数据库查询。 定义模型类 我们后面会把模型创建到单独的文件,但是现在我们先把模型类写在manage.py文件。...常用的SQLAlchemy查询过滤过滤器 说明 filter() 把过滤器添加到原查询上,返回一个新查询 filter_by() 把等值过滤器添加到原查询上,返回一个新查询 limit() 使用指定的值限定原查询返回的结果

    3.2K20

    Flask 操作Mysql数据库 - flask-sqlalchemy扩展

    官网文档 https://flask-sqlalchemy.palletsprojects.com/en/master/quickstart/ 数据库的设置 Web应用普遍使用的是关系模型的数据库,关系型数据库把所有的数据都存储在表...数据库连接通过URL指定,而且程序使用的数据库必须保存到Flask配置对象的SQLALCHEMY_DATABASE_URI。...join 明确指定两个模型之间使用的联结条件 uselist 如果为False,不使用列表,而使用标量值 order_by 指定关系记录的排序方式 secondary 指定多对多记录的排序方式 secondary...在Flask-SQLAlchemy查询操作是通过query对象操作数据。最基本的查询是返回表中所有数据,可以通过过滤器进行更精确的数据库查询。 下面先来创建两个表的数据模型:用户表和角色表。...常用的SQLAlchemy查询过滤过滤器 说明 filter() 把过滤器添加到原查询上,返回一个新查询 filter_by() 把等值过滤器添加到原查询上,返回一个新查询 limit 使用指定的值限定原查询返回的结果

    20.9K22

    盘点Flask与数据库的交互插件--Flask-Sqlalchemy

    前言 在我们做web开发的时候,经常需要用到与数据库交互,因为我们的数据通常都是保存在数据库的,如果有人需要访问,就必须与数据库访问,所以今天我们介绍一个Flask与数据库交互的插件---Flask-Sqlalchemy...默认为2小时 SQLALCHEMY_RECORD_QUERIES # 可以用于显式地禁用或启用查询记录 SQLALCHEMY_ECHO # 为Ture时用于调试,显示错误信息...__name__,self.name) 2).一对多 我们需要建立一个主表和一个子表,分别命名为“father”和‘son’,然后需要建立外和反射来互相引用建立一种关系,我们来看看: class father...到40的记录 son.query(son)[10:40] 17).分页获取数据 p=request.args.get('p') # 请求的查询字符串获取当前页面,返回一个每页显示3条记录的分页对象...total # 查询返回的记录总数 18).查询仅显示一条记录 son.query(son).one() 5.更新数据 ss=son.query.get(1) ss.name='fasd'

    2.5K60

    Flask-SQLAlchemy学习笔记

    Flask-SQLAlchemy是一个Flask扩展,简化了在Flask应用中使用SQLAlchemy的操作,SQLAlchemy是一个强大的关系型数据库框架,支持多种数据库后台。...在Flask-SQLAlchemy,指定使用何种数据库是通过URL来实现的,各种主流数据库引擎使用URL格式如下: # hostname:数据库服务所在主机 # database:使用的数据库名...query对象all()方法查询查询相应表中所有记录:Role.query.all(),这里的all()是返回所有的结果,还有一个是first()方法,其表示只返回第一个结果,如果没有取到结果则返回None...,返回一个新查询 # filter_by() 把等值过滤器添加到原查询上,返回一个新查询 # limit() 使用指定的值限制原查询返回的结果数量,返回一个新查询 # offset() 偏移原查询返回的结果...表中用户角色为user的,查询结果:[],发现结果为列表形式,自动执行查询all()方法,为了禁止自动查询执行方法,我们可以在Role关系定义中加入lazy="dynamic

    1.7K20

    FlaskORM框架之SQLAlchemy插件入门到弃坑

    答: 官方文档使用关系 relationship 进行 外的反向引用即级联查询,注意点他不是映射在数据库之中的他实际上是Django的隐型属性; # 基础语法 外反向引用名称 = db.relationship...答: 学过数据库的人都应该知道索引是为了加快在关系型数据库数据的查找, 所以一般常常加在被搜索的字段之上; 3.常用方法 4.查询方法 常用查询数据结果集: # 语法 模型类名.query.xxx...page=8&count=10 WeiyiGeek.paginate 补充说明: (1) 在Flask-SQLAchemy里筛选中的all()只能放在最后且后面不能加filter()等过滤条件; (2...\Day3> WeiyiGeek.模型继承 2.级联数据与外 描述:级联数据之外间的关系 1:1 ForeignKey + Unique 1:M ForeignKey M:N 额外扩充的关系表即多个...ForeignKey 基础实例: 1.外与外反向引用的模型构建 2.使用关系 relationship 进行外的反向引用即级联查询; # Day3\App\models.py # 例如以下数据库模型的声明

    3.3K10

    Flask框架重点知识总结回顾

    1.加载应用程序配置 加载应用程序配置有三种方式: 1/配置对象中加载配置信息from_object 2/配置文件中加载配置信息 3/环境变量中加载配置信息 重点掌握第1种,在工作,我们的项目在启动的时候...,并转换为字符串,非表单数据 * args 记录请求查询参数 MultiDict form 记录请求的表单数据 MultiDict cookies 记录请求的cookie信息 Dict ?...8.2一对多的关系 1/我们在定义模型的时候要继承的类是db.Model 2/添加外的时候要添加在多方 3/添加关系的时候添加在一方 class Role(db.Model):...# 添加外 role_id = db.Column(db.Integer,db.ForeignKey('roles.id')) 其中relationship描述了Role和User的关系...):这样关联对象会在被使用的时候再进行加载,并且在返回前进行过滤,如果返回的对象数很多,或者未来会变得很多,那最好采用这种方式 第四个参数secondary:指定多对多关系关系表的名字 8.3数据的增删改

    1.2K20

    Flask 数据库相关

    如果为True,允许有空值,如果为False,不允许有空值 default 为这列定义默认值 常用的SQLAlchemy关系选项 关系型数据库使用关系把不同表的行联系起来。...order_by 指定关系记录的排序方式 secondary 指定多对多 记录的排序方式 secondary join 在SQLAlchemy无法自行决定时,指定多对多 关系的二级联结条件 lazy...(用不加载)、dynamic(不加载记录,但提供加载记录查询) 以下展示常见的一种一对多 关系在模型类的定义。...这一属性可以替代role_id访问Role模型,此时获取的是模型对象,而不是外的值。 除了一对多以外,还有其他关系类型。 、 、 。...常用的SQLAlchemy查询过滤过滤器 说明 filter() 把过滤器添加到原查询上,返回一个新查询 filter_by() 把等值过滤器添加到原查询上,返回一个新查询 limit 使用指定的值限定原查询返回的结果

    96610

    python学习笔记SQLAlchemy

    简单的说,ORM 将数据库的表与面向对象语言中的类建立了一种对应关系。这样,我们要操作数据库,数据库的表或者表的一条记录就可以直接通过操作类或者类实例来完成。 ?...接着通过 engine.execute 方法执行了一条 SQL 语句,查询了 user 表的所有用户。 对象关系映射 要使用 ORM, 我们需要将数据表的结构用 ORM 的语言描述出来。...创建的 articles 表有外 userid, 在 SQLAlchemy 可以使用 ForeignKey 设置外。...设置外后,如果能够直接 articles 的实例上访问到相应的 users 表记录会非常方便,而这可以通过 relationship 实现。...作为动态关系查询显示为: >>> py.posts 它的行为像一个普通的查询对象

    3.1K30

    小白学Flask第十一天| flask-sqlalchemy数据库扩展包(一)

    数据库连接通过URL指定,而且程序使用的数据库必须保存到Flask配置对象的SQLALCHEMY_DATABASE_URI,就例如下面这样: app.config['SQLALCHEMY_DATABASE_URI...:3306/Flask_test' #设置每次请求结束后会自动提交数据库的改动 app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True #查询时会显示原始...role_id = db.Column(db.Integer, db.ForeignKey('role_id')) 添加到user模型的role_id列被定义成外,就是这个外建立起列关系。...传给db.ForeignKey()的参数‘role.id'表明,这列的值是roles表的相应行的id值。 “一”那一端可知,添加到Role模型的users属性代表这个关系的面向对象吃的视角。...,不使用列表,而使用标量值 order_by 指定关系记录的排序方式 secondary 指定多对多记录的排序方式 secondary join 在SQLAlchemy无法自行决定时,指定多对多关系的二级联结条件

    2.6K30
    领券