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")