flask 定义数据库关系(一对一)

一对一

我们将使用国家和首都来演示一对一关系:每个国家只有一个首都。反过来,一个城市也只能作为一个国家的首都。一对一关系如下:

在示例程序中,Country类表示国家,Capital类表示首都。建立一对一关系后,我们将在Country类中创建一个标量关系capital,调用它会获取单个Capital对象,我们还在Capital类中创建一个标量关系属性country,调用它会获取单个的Country对象。

一对一关系实际上是通过建立双向关系的一对多关系的基础上转化而来。我们要确保关系两侧的关系属性都是标量属性,都只返回单个值,所以要在定义集合属性的关系函数中将uselist参数设为False,这时一对多关系将被转换为一对一关系。下面代码基于建立双向关系的一对多关系实现了一对一关系。

app.py:建立一对一关系

class Country(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    name = db.Column(db.String(30), unique = True)
    capital = db.relationship(‘Capital‘, uselist = False)

    def __repr__(self):
        return ‘<Country %r>‘ % self.name

class Capital(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    name = db.Column(db.String(30), unique = True)
    country_id = db.Column(db.Integer, db.ForeignKey(‘country.id‘))
    country = db.relationship(‘Country‘)

    def __repr__(self):
        return ‘<Capital %r>‘ % self.name

“多”这一侧本身就是标量关系属性,不用做任何改动(有外键的是“多”这一侧),而“一”这一侧的集合关系属性,通过将uselist设为False后,将仅返回对应的单个记录,而且无法再使用列表语义操作

原文地址:https://www.cnblogs.com/xiaxiaoxu/p/10618390.html

时间: 2024-08-01 06:14:39

flask 定义数据库关系(一对一)的相关文章

flask 定义数据关系(多对一)

多对一 一对多关系反过来就是多对一关系,这两种关系模式分别从不同的视角出发.一个作者拥有多篇文章,反过来就是多篇文章属于同一个作者.为了便于区分,我们使用居民和城市来演示多对一关系:多个居民住在同一个城市.多对一关系如下: 在例子中,Citizen类表示居民,City类表示城市.建立多对一关系后,我们将在Citizen类中创建一个标量关系属性city,调用它可以获取单个City对象. 我们在前面介绍过,关系属性在关系模式的出发侧定义.当出发点在“多”这一侧时,我们希望在Citizen类中添加一个

表关系(一对一,一对多,多对多)

可以在数据库图表中的表之间创建关系,以显示一个表中的列与另一个表中的列是如何相链接的. 在一个关系型数据库中,利用关系可以避免多余的数据.例如,如果设计一个可以跟踪图书信息的数据库,您需要创建一个名为 titles 的表,它用来存储有关每本书的信息,例如书名.出版日期和出版社.您也可能保存有关出版社的信息,诸如出版社的电话.地址和邮政编码.如果您打算在 titles 表中保存所有这些信息,那么对于某出版社出版的每本书都会重复该出版社的电话号码. 更好的方法是将有关出版社的信息在单独的表,publ

多表关系一对一

多表关系一对一 一.多表关系 外键:建立表与表关联 的字段,通常 一个表的外键 是 另一个表的主键(唯一键也可以) 一对一关系:外键在任何一方都可以,此时外键要设置 唯一键 一对多关系:外键必须放在多的一方,此时外键值不唯一 多对多关系:一定要创建第三张表(关系表),每一个外键值不唯一,可以多个外键建立联合唯一 二.一对一无级联关系 创建数据库 # 作者详情(author_detail): id,info,address create table author_detail( id int pr

进程与线程的定义、关系及区别

进程与线程的定义.关系及区别     --参考博客文章:http://blog.csdn.net/yanxiaolx/article/details/51763372 一.进程的定义 进程:指在系统中能独立运行并作为资源分配的基本单位,它是由一组机器指令.数据和堆栈等组成的,是一个能独立运行的活动实体. 进程一般有三个状态:就绪状态.执行状态和等待状态[或称阻塞状态]:进程只能由父进程建立,系统中所有的进程形成一种进程树的层次体系:挂起命令可由进程自己和其他进程发出,但是解除挂起命令只能由其他进

用mysql workbench导出mysql数据库关系图

用mysql workbench导出mysql数据库关系图 1. 打开mysql workbench,选择首页中间"Data Modeling"下方的第二栏"Create EER Model From Existing Database";2. 在"Stored Connection"里选择"Manage Stored Connections...";3. 在Manage DB Connections里选择“New”新建连接,

BI之SSAS完整实战教程6 -- 设计维度、细化维度上:创建维度定义特性关系

前面我们使用过数据源向导.数据源视图向导.Cube向导来创建相应的对象. 本篇我们将学习使用维度向导来创建维度. 通过前面几个向导的学习,我们归纳一下共同点,主要分成两步 1. 使用某种对象类型的向导创建对象,完成主要结构搭建 2. 使用相应的设计器完成最终对象的修改和细化 有点像送快递,先通过大的物流(创建对象向导)把货物送到相应的城市,再通过快递员(设计器进行细化)送到具体顾客手中. 同样的,我们使用维度向导以一种通用的方式来创建维度,然后根据自己的业务需求,使用维度设计器将创建的维度放置到

kettle中使用javascript步骤和fireToDB函数实现自己定义数据库查询

kettle中使用javascript步骤和fireToDB函数实现自己定义数据库查询 如果你须要实现非传统的数据库查询操作.为了讨论这样的情景,我们如果你须要读取数据库中的正則表達式,然后检查输入的每行的字段匹配表达式的个数. 在javascript步骤运行数据库查询 在javascript步骤初始化的时候,查询数据库.获取正則表達式记录集.然后每一行的输入数据循环检查是否匹配表达式,假设匹配.记录变量加一,最后把结果写到到前行的新增字段中. 思路非常清楚,可是怎样在javascript步骤实

uml中定义的关系详细详解

uml定义的关系主要有六种:依赖.类属.关联.实现.聚合和组合.下面对其定义和表示方法逐一说明. 依赖(Dependency):元素A的变化会影响元素B,但反之不成立,那么B和A的关系是依赖关系,B依赖A:类属关系和实现关系在语义上讲也 是依赖关系,但由于其有更特殊的用途,所以被单独描述.uml中用带箭头的虚线表示Dependency关系,箭头指向被依赖元素. 类属(Generalization):通常所说的继承(特殊个体 is kind of 一般个体)关系,不必多解释了.uml中用带空心箭头

数据库关系图

对特定的数据库表进行可视化管理与分析 一个数据库可以创建多个数据库关系图 使用系统存储过程改变数据库所有者为当前登录SA账号 EXEC sp_changedbowner sa 原文地址:https://www.cnblogs.com/xiaowie/p/8674995.html