【SQLALCHEMY】表关联关系

本文深入解析SQLAlchemy中的一对一、一对多及多对多表关联关系实现方法,通过具体实例代码演示如何在Python中定义外键及使用relationship进行表间关系映射。

【SQLALCHEMY】表关联关系

1、一对一或一对多

实例代码

class Parent(db.Model):
    __tablename__ = 'parent'
    id = db.Column(db.Integer, primary_key=True)
    cc = relationship("Child", uselist=False, back_populates="pp")


class Child(db.Model):
    __tablename__ = 'child'
    id = db.Column(db.Integer, primary_key=True)
    parent_id = db.Column(db.Integer, db.ForeignKey('parent.id'))
    pp = relationship("Parent", back_populates="cc")

重点一

parent_id = db.Column(db.Integer, db.ForeignKey('parent.id'))

这行脚本会指定建立一个外键,注意ForeginKey的参数是<表名>.<键名>,而不是<类名>.<字段名>

重点二
注意下图的对应关系,使用relationship指定两表见的关系时映射关系如下。

  • relationship的第一个参数是类名
  • back_populates参数的值是有对应关系的
  • 如果要一对一映射而不是一对多,只需要在父表的relationship指定参数uselist的值为False
    一对一、一对多关系重点

2、多对多

association_table = Table('association', db.Model.metadata, db.Column('left_id', db.Integer, ForeignKey('left.id')),
                          db.Column('right_id', db.Integer, ForeignKey('right.id'))
                          )


class Parent(db.Model):
    __tablename__ = 'left'
    id = db.Column(db.Integer, primary_key=True)
    children = relationship(
        "Child",
        secondary=association_table,
        back_populates="parents")


class Child(db.Model):
    __tablename__ = 'right'
    id = db.Column(db.Integer, primary_key=True)
    parents = relationship(
        "Parent",
        secondary=association_table,
        back_populates="children")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值