ORM SQLAlchemy 表于表的关系

Posted Sysnap 谢奕智

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 多对一

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



以上是关于ORM SQLAlchemy 表于表的关系的主要内容,如果未能解决你的问题,请参考以下文章

flask 中orm关系映射 sqlalchemy的查询

SQLAlchemy(三):外键连表关系

ORM框架之SQLAlchemy

动态 SQLAlchemy ORM 关系生成

重修课程day40(mysql四之表与表关联和表操作)

我可以在 SQLAlchemy ORM 中使用动态关系(或视图)吗?