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

SQLAlchemy -通过父模型访问子模型的列(一对一关系)

SQLAlchemy是一个Python的SQL工具和对象关系映射(ORM)库。它提供了一种在Python中操作数据库的高级抽象方式,使开发人员能够使用Python语言进行数据库操作,而无需直接编写SQL语句。

在SQLAlchemy中,通过定义模型类来映射数据库表。对于一对一关系,可以使用relationship函数来定义父模型和子模型之间的关系。要通过父模型访问子模型的列,可以使用backref参数来指定反向引用。

下面是一个示例:

代码语言:python
复制
from sqlalchemy import Column, Integer, String, ForeignKey
from sqlalchemy.orm import relationship
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class Parent(Base):
    __tablename__ = 'parents'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    child = relationship("Child", uselist=False, backref="parent")

class Child(Base):
    __tablename__ = 'children'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    parent_id = Column(Integer, ForeignKey('parents.id'))

# 创建数据库表
Base.metadata.create_all()

# 创建父模型对象
parent = Parent(name='Parent 1')

# 创建子模型对象
child = Child(name='Child 1')

# 将子模型对象关联到父模型对象
parent.child = child

# 通过父模型访问子模型的列
print(parent.child.name)  # 输出: Child 1

在上面的示例中,ParentChild分别表示父模型和子模型,它们之间通过relationship函数建立了一对一关系。backref="parent"表示在子模型中创建一个名为parent的属性,可以通过父模型访问子模型的列。

对于SQLAlchemy的更多详细信息和用法,请参考腾讯云的相关文档和官方网站:

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

相关·内容

SQLAlchemy建立数据库模型之间关系

关系出发侧定义 ## relationship()函数第一个参数为关系另一侧模型名称(Article) articles = db.relationship('Article')...:"表名.字段名" ## 模型类对应表名由Flask-SQLAlchemy生成,默认为类名称小写形式,多个单词通过下划线分隔 author_id = db.Column(db.Integer...,也可通过标量关系属性操作关系 多对一关系(多个市民都在同一个城市) # 外键总在多一侧定义 ## 多对一关系中,外键和关系属性都在多一侧定义 ## 这里关系属性是标量关系属性(返回单一数据) class...(国家和首都) ## 一对一关系,将关系函数uselist参数设为False,使得集合关系属性无法使用列表语义操作 ## 这里使用一对一双向关系 class Country(db.Model):...关联表不存储数据,只用来存储关系两侧模型外键对应关系 定义关系两侧关系函数时,需要添加一个secondary参数,值设为关联表名称 关联表由使用db.Table类定义,传入第一个参数为关联表名称

1.6K20

Python Web - Flask笔记6

SQLAlchemy提供了一个relationship,这个类可以定义属性,以后在访问相关联时候就直接可以通过属性访问方式就可以访问得到了。...一对一关系: 在sqlalchemy中,如果想要将两个模型映射成一对一关系,那么应该在模型中,指定引用时候,要传递一个uselist=False这个参数进去。...多对多关系: 多对多关系需要通过一张中间表来绑定他们之间关系。...删 delete-orphan:表示当对一个ORM对象解除了表中关联对象时候,自己便会被删除掉。当然如果表中数据被删除,自己也会被删除。...在查询中,如果想要使用查询字段,那么可以通过查询返回值上c属性拿到。

1.9K10

SqlAlchemy 2.0 中文文档(十一)

然后,两个独立 relationship() 构造将首先父侧通过一对多连接到映射关联类,然后通过多对一将映射关联类连接到侧,以形成从父对象到关联对象到对象单向关联对象关系。...这个扩展允许配置属性,这些属性将通过单一访问访问两个“跳”,一个“跳”到关联对象,第二个“跳”到目标属性。 另见 关联代理 - 允许级和级之间进行直接“多对多”样式访问,用于三类关联对象映射。...另请参阅 关联代理 - 允许对象和对象之间直接“多对多”样式访问,用于三类关联对象映射。...然后,两个独立relationship()构造首先通过一对多将侧链接到映射关联类,然后通过多对一将映射关联类链接到侧,以形成从父对象到关联对象到对象单向关联对象关系。...该扩展允许配置属性,这些属性将通过单个访问实现两次“跳跃”,一次是到关联对象,另一次是到目标属性。 另请参阅 关联代理 - 允许在三类关联对象映射中在对象和对象之间直接进行“多对多”样式访问

8210

Python 使用SQLAlchemy数据库模块

SQLAlchemy 是用Python编程语言开发一个开源项目,它提供了SQL工具包和ORM对象关系映射工具,使用MIT许可证发行,SQLAlchemy 提供高效和高性能数据库访问,实现了完整企业级持久模型...SQLAlchemy提供了一个relationship,这个类可以定义属性,以后在访问相关联时候就直接可以通过属性访问方式就可以访问得到。...如果想要将两个模型映射成一对一关系,那么应该在模型中,指定引用时候,要传递一个uselist=False参数进去。...就是告诉模型,以后引用这个从模型时候,不再是一个列表了,而是一个对象了。...连接查询通过JOIN语句实现,查询则通过subquery实现,首先需要创建一对多关系然后才可使用查询。

35310

flask数据操纵

SQLAlchemy是一个关系型数据库框架,它提供了高层ORM和底层原生数据库操作。flask-sqlalchemy是一个简化了SQLAlchemy操作flask扩展。...如果为True,为这创建索引,提高查询效率 nullable 如果为True,允许有空值,如果为False,不允许有空值 default 为这定义默认值 关系类型 选项 说明 backref 在关系另一模型中添加反向引用...secondary join 在SQLAlchemy中无法自行决定时,指定多对多关系二级联结 创建 在Flask-SQLAlchemy中,插入、修改、删除操作,均由数据库会话管理。...我们模型已经描述过了一对多,那么下面我们在用模型把其它关系也写出来。...一对一 # 文章模型 class Article(db.Model): # 表名 __tablename__ = 'tbl_article' # 数据库真正存在字段

1.3K10

3分钟短文:说说Laravel模型关联关系最单纯一对一

[img] 所以,laravel模型提供了关联关系,本文就来梳理梳理那些用法。 代码时间 我们不要PPT似的念稿子,罗列出所有的关系模型,那样不直观也不是高效学习方式。...一个user对应一个profile,所以这是一对一关系, 在User模型里添加如下声明: class User extends Model { public function profile(...首先使用 User::find($id) 返回是一个 User 模型对象实例。 该实例有一个 profile 方法,就是上面这段关系声明。...: $user = User::find($id); $user->profile()->delete(); 由于是严格一对一关系,也就是一个user只有一个profile,如果某个user被删除了,...“一对一”,我们从程序角度和数据库角度讲解了 如何在删除资源时一致性删除。

1.9K31

SQLAlchemy学习-9.一对多和多对一关系

前言 一对多和多对一关系 一对多关系 一对多关系表设计,一个Parent类关联多个Child类 from sqlalchemy.ext.declarative import declarative_base...__main__': engine = create_engine(DB_URI) Base.metadata.create_all(engine) # 将模型映射到数据库中 与一对一关系主要区别是...,查询子类(单向查询) parent = session.query(Parent).get(1) print(parent.children) 多对一关系 多对一关系相比上面的一对多而言是双向关系...在最新版本 sqlalchemy 中对 relationship 引进了 back_populates 参数, 两个参数效果完全一致。...查询数据(双向查询) 通过类查询子类,或子类查询类 from sqlalchemy.orm import sessionmaker from sqlalchemy import create_engine

3.1K20

SqlAlchemy 2.0 中文文档(十五)

relationship()始终假定在刷新期间以“/模型进行行填充,因此除非直接填充主键/外键,否则relationship()需要使用两个语句。...relationship()始终假定在刷新期间使用“/模型来填充行,因此除非直接填充主键/外键,否则 relationship() 需要使用两个语句。...该选项目的通常是性能之一,因为内连接通常比外连接执行得更好。 当关系引用通过不可为空本地外键引用对象时,或者引用为一对一或保证具有一个或至少一个条目的集合时,可以将此标志设置为True。...对于一般“永不加载”方法,请参见仅写关系。 raise - 禁止惰性加载;如果属性值尚未通过急切加载加载,则访问该属性将引发InvalidRequestError。...另请参阅 指定替代连接条件 single_parent – 当为 True 时,安装一个验证器,该验证器将阻止对象同时与多个对象关联。这用于应将多对一或多对多关系视为一对一或一对多情况。

8610

模型继承与对应关系

一、模型继承 1、类没有抽象化 子类不会生成表,类会生成表,并且将子类独有的字段放入类表中 ...对关系之间提供一种便利调用方式,关联不同表 backref参数 对关系提供反向引用声明,在Address类上声明新属性简单方法,之后可以在my_address.user来获取这个地址...joined:让 SQLAlchemy级使用 JOIN 语句是,在相同查询中加载关系 subquery:类似 joined ,但是 SQLAlchemy 会使用查询 dynamic:SQLAlchemy...,表示一个User外键,设定上必须要能在表中找到对应id值 一对多模型数据添加 @rel.route('/add_user/')...backref函数,并添加uselist参数来表示一对一关系 添加数据以及模型对应关系数据 # 添加妻子数据 <span class=

1.3K10

SqlAlchemy 2.0 中文文档(十九)

这种加载样式发出一个 SELECT,该 SELECT 引用对象主键值,或者在一对多关系情况下引用对象主键值,以便在 IN 子句中加载相关联关系: >>> from sqlalchemy import...使用 raiseload() 配置关系属性在访问时会引发 InvalidRequestError。此方法通常有用方式是,当应用程序试图确保在特定上下文中访问所有关系属性都已通过激进加载加载时。...查询急加载 关系加载样式总结 关系加载主要形式包括: 延迟加载 - 通过lazy='select'或lazyload() 选项可用,这是在属性访问时发出 SELECT 语句以延迟加载单个对象上相关引用加载形式...这种加载样式发出一个 SELECT,该 SELECT 引用对象主键值,或者在一对多关系情况下引用对象主键值,位于 IN 子句中,以加载相关联关系: >>> from sqlalchemy import...使用raiseload()配置关系属性在访问时将引发InvalidRequestError。这种方式通常很有用,当应用程序试图确保在特定上下文中访问所有关系属性都已通过急加载加载时。

11110

Flask学习与项目实战5:通过SQLAlchemy连接数据库进行ORM模型简单增删改查

SQLAlchemy介绍 是对于数据库ORM框架,直接操作模型,安装命令为pip install SQLAlchemy。...SQLAlchemy是一个独立ORMR框架,可以独立于FLASK存在,也可以在Django中使用。 Flask-SQLAlchemy是对SQLAlchemy一个封装,更适合在flask使用。...安装 输入命令:pip install flask-sqlalchemy 然后再输入命令:pip install pymysql 这个库是用来连接数据库 from sqlalchemy import...这个可以设置。(我不设置这个就不能正常运行,好像是py新版本要求。) 创建数据库表及定义字段 通过方框内代码既可以进行ORM模型使用,然后create_all()即可创建数据库表了。...#ORM模型 class Article(db.Model): __tablename__ = "article" id = db.Column(db.Integer,primary_key

9610

Flask入门第三天

一、数据库操作   1,orm orm(object-Relation Mapping),对象-关系映射,主要实现模型对象到关系数据库数据映射。...SQLAlchemy是一个关系型数据库框架,它提供了高层 ORM 和底层原生数据库操作。flask-sqlalchemy 是一个简化了 SQLAlchemy 操作flask扩展。...True,允许有空值,如果为False,不允许有空值 default:为这定义默认值   2.4 常用SQLALchemy关系选项 backref:在关系另一模型中添加反向引用,用于设置外键名称,...在1查多 primary join:明确指定两个模型之间使用联结条件 uselist:如果为False,不使用列表,而使用标量值 order_by:指定关系中记录排序方式 secondary:指定多对多关系关系名字...在 Flask-SQLAlchemy 中,查询操作是通过 query 对象操作数据。 最基本查询是返回表中所有数据,可以通过过滤器进行更精确数据库查询。

2.7K20

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

官网文档 https://flask-sqlalchemy.palletsprojects.com/en/master/quickstart/ 数据库设置 Web应用中普遍使用关系模型数据库,关系型数据库把所有的数据都存储在表中...它使用结构化查询语言。关系型数据库定义了表中表示实体数据属性。比如:商品表里有name、price、number等。...index 如果为True,为这创建索引,提高查询效率 nullable 如果为True,允许有空值,如果为False,不允许有空值 default 为这定义默认值 常用SQLAlchemy关系选项...选项名 说明 backref 在关系另一模型中添加反向引用 primary join 明确指定两个模型之间使用联结条件 uselist 如果为False,不使用列表,而使用标量值 order_by...最基本查询是返回表中所有数据,可以通过过滤器进行更精确数据库查询。 下面先来创建两个表数据模型:用户表和角色表。

5.3K20

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

前言 在我们做web开发时候,经常需要用到与数据库交互,因为我们数据通常都是保存在数据库中,如果有人需要访问,就必须与数据库访问,所以今天我们介绍一个Flask中与数据库交互插件---Flask-Sqlalchemy...一对一 只需让两张表都在同等位置上,属于双向关系。...,backref可替代Father.id访问father模型 son_fa=db.relationship('son',backref='fa',lazy='dynamic') # lazy...__repr__() 3).多对一 就是将反射应用在子表上,与表同时进行关联。...db.session.commit() 三、总结 Sqlalchemy支持很多表建立和操作,通过对它了解,我们可以很方便操作数据库数据从而与前端页面交互达到可视化效果,通过这篇文章学习,相信你可以独立开发一个小网站了

2.4K60

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

关系 数据库设置 学习过web开发的人也许都知道,在web开发中最常用数据库就是关系模型数据库,关系型数据库把所有的数据都存储在表中,表用来给应用实体建模,表数是固定,行数是可变。...定义模型 模型是表示应用使用持久化实体,在ORM中,模型一般是一个Python类,类中属性就是数据库表中。...上图就是一个一对多关系。 那么如何通过代码来实现这种关系呢? class Role(db.Model): #......backref参数向User模型中添加一个role属性,从而定义反向关系通过User实例这个属性可以获得对应Role模型对象,而不用再通过role_id外键获取。...这里给出常用SQLAlchemy关系选项: 选项名 说明 backref 在关系另一模型中添加反向引用 primary join 明确指定两个模型之间使用联结条件 uselist 如果为False

2.6K30

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

官网文档 https://flask-sqlalchemy.palletsprojects.com/en/master/quickstart/ 数据库设置 Web应用中普遍使用关系模型数据库,关系型数据库把所有的数据都存储在表中...它使用结构化查询语言。关系型数据库定义了表中表示实体数据属性。比如:商品表里有name、price、number等。...index 如果为True,为这创建索引,提高查询效率 nullable 如果为True,允许有空值,如果为False,不允许有空值 default 为这定义默认值 常用SQLAlchemy关系选项...选项名 说明 backref 在关系另一模型中添加反向引用 primary join 明确指定两个模型之间使用联结条件 uselist 如果为False,不使用列表,而使用标量值 order_by...最基本查询是返回表中所有数据,可以通过过滤器进行更精确数据库查询。 下面先来创建两个表数据模型:用户表和角色表。

20.6K22
领券