ORM SQLAlchemy 表于表的关系

1表与表之间三种关系

1.1 一对一关系

举例: 一个丈夫对应一个妻子,一个妻子对应一个丈夫

1.2 一对多关系

举例:一个人可以拥有多辆汽车,要求查询某个人拥有的所有车辆

分析:这种情况其实也可以采用 一张表,但因为一个人可以拥有多辆汽车,如果采用一张表,会造成冗余信息过多。好的设计方式是,人和车辆分别单独建表,那么如何将两个表关联呢?有个巧妙的方法,在车辆的表中加个外键字段(人的编号)即可。

1.3 多对多关系

例如:学生选课,一个学生可以选修多门课程,每门课程可供多个学生选择。 
分析:这种方式可以按照类似一对多方式建表,但冗余信息太多,好的方式是实体和关系分离并单独建表,实体表为学生表和课程表,关系表为选修表,其中关系表采用联合主键的方式(由学生表主键和课程表主键组成)建表。

2 SQLAlchemy 表关系使用

2.1 一对多

比如一个父亲可以有多个孩子,

class Parent(Base):
    __tablename__ = ‘parent‘
    id = Column(Integer, primary_key=True)
    children = relationship("Child")

class Child(Base):
    __tablename__ = ‘child‘
    id = Column(Integer, primary_key=True)
    parent_id = Column(Integer, ForeignKey(‘parent.id‘))

一对多要建立双向关系
class Parent(Base):
    __tablename__ = ‘parent‘
    id = Column(Integer, primary_key=True)
    children = relationship("Child", back_populates="parent")

class Child(Base):
    __tablename__ = ‘child‘
    id = Column(Integer, primary_key=True)
    parent_id = Column(Integer, ForeignKey(‘parent.id‘))
    parent = relationship("Parent", back_populates="children")

2.2 多对一

比如一个父亲可以有多个孩子,

				
时间: 2024-08-11 09:44:40

ORM SQLAlchemy 表于表的关系的相关文章

Django中ORM外键和表的关系(Django编程-4)

外键 在MySQL中,表有两种引擎,一种是InnoDB,另外一种是myisam.如果使用的是InnoDB引擎,是支持外键约束的.外键的存在使得ORM框架在处理表关系的时候异常的强大.因此这里我们首先来介绍下外键在Django中的使用. 类定义为class ForeignKey(to,on_delete,**options).第一个参数是引用的是哪个模型,第二个参数是在使用外键引用的模型数据被删除了,这个字段该如何处理,比如有CASCADE.SET_NULL等.这里以一个实际案例来说明.比如有一个

第四天,表与表之间的关系,一对多,多对多,查询

※MySQL中的字符编码(注意,utf8中没有'-',跟Java中不一样)SHOW VARIABLES; //查看系统变量//查询字符编码相关的系统变量SHOW VARIABLES WHERE variable_name LIKE 'character%'; 解决MySQK的中文乱码:character_set_client,character_set_connection和character_set_results这三者必须一致(GBK,GB2312,UTF8这三者都可以,但若采用其中一种则3

MySQL---数据库从入门走上大神系列(四)-子查询、表与表之间的关系

本篇博客讲解(子查询)非相关子查询/相关子查询,一对一,一对多,多对一,多对的的关系! 准备: 首先我们创建一列sex.再为部分行设置好值0(女)或者1(男): delete from stud where age=26; 删除年龄为26的行. update stud set sex='1' where saddress like '湖南%'; 将地址中湖南开头的人的的sex修改为1. update stud set sex='0' where age>=30 and sex is null;

mysql表与表之间的关系(多对多,一对多)

#创建数据库CREATE DATABASE day15;#使用USE day15;#创建表CREATE TABLE test1( id INT PRIMARY KEY AUTO_INCREMENT,#这是主键 num INT UNIQUE, #这个唯一键不起作用? NAME VARCHAR(22));#存入数据INSERT INTO test1(NAME) VALUES('aaa'); #删除数据但是不重置自动增长数DELETE FROM test1; #删除数据重置行数(相当于删除掉整个表,然

表与表之间关系回顾

------------------siwuxie095 表与表之间关系回顾 1.一对多 (1) 1)场景:分类和商品的关系 2)描述:一个分类里面有多个商品,一个商品只能属于一个分类 (2) 1)场景:客户和联系人的关系 2)描述:一个客户里面有多个联系人,一个联系人只能属于一个客户 注意:这里的客户是公司级的,即 公司,联系人 即 公司里的员工,实 际上就是公司和员工的关系 (3)一对多建表:通过外键建立关系 在多的那一方创建字段作为外键,指向一的那一方的主键 客户: cid cname 1

获取完全一样的数据库,包括表与表之间的外键关系,check,default表结构脚本

今天公司给了一个任务,某一个项目由于数据过大,造成Sql Server 2012 的运行占用很大内存,于是要把之前的不常用的数据分开.要求写个脚本,要求: 1.能获取原来数据库中的表结构,主键一致.表与表之间的约束关系(外键,check,default)一致: 2.有些表不想要就不要,可选. 3.而且效率要考虑,这个脚本以后常用. (这里都是本地的测试数据) 软件: Sql Server2012(其他的版本没有亲自试验,不知道效果) 图1:找到原数据库,选择任务-->生成脚本 图2:选择要创建的

表与表之间的关系

导语: 把所有的数据都存放于一张表的弊端 1:表的组织结构复杂不清晰 2:浪费空间 3:扩展性极差 一. 寻找表与表之间的关系套路: 举例:emp 员工表         dep 部门表 步骤: part1: 1.先站在左表 emp 的角度 2.去找左表emp 的多条记录能否对应右表dep的一条记录 3.翻译2 的意义: 左表emp 的多条记录==>>多个员工 右表dep 的一条记录==>>一个部门 最终的翻译结果:多个员工是否可以属于同一个部门? 如果是则需要进行part2 的流

表与表之间的关系二

---恢复内容开始--- 导语: 把所有的数据都存放于一张表的弊端 1:表的组织结构复杂不清晰 2:浪费空间 3:扩展性极差 一. 寻找表与表之间的关系套路: 举例:emp 员工表         dep 部门表 步骤: part1: 1.先站在左表 emp 的角度 2.去找左表emp 的多条记录能否对应右表dep的一条记录 3.翻译2 的意义: 左表emp 的多条记录==>>多个员工 右表dep 的一条记录==>>一个部门 最终的翻译结果:多个员工是否可以属于同一个部门? 如果是

约束条件 ,表与表之间的关系 和多表联合查询***

一.约束条件    为了确保数据的完整性 可以给列加上约束条件    完整性的分类:        1.实体完整性        2.域完整性        3.引用完整性    1.实体完整性        实体:即表中的一行(一条)记录 代表一个实体 entity        实体完整性的作用:标识每一行数据不重复        约束类型:            1.1 主键约束(primary key)            1.2 唯一约束(unique)            1.3