定义复合外键的唯一方法:https://docs.sqlalchemy.org/en/13/core/constraints.html?highlight=foreignkey#metadata-foreignkeys
注意:使用flask-sqlalchemy复合外键定义方法ForeignKeyConstraint使用报错,回头单独使用sqlalchemy在测试一下
使用flask建立一对多的关系建立原理【对应一个外键】:
"""
功能:建立一个一对多的关系:ParentModel 对 [ChildAModel ,ChildBModel]
作用:
1、子自动查询关联的父类实例:建立了关联之后,在ChildAModel和ChildBModel对象中直接可以访问parent_model关联的父类对象
2、父自动查询关联的子类实例:在ParentModel可以直接访问child_a_model和child_b_model实例
"""
class ParentModel(Base):
# 用户地址【必须唯一】
address = db.Column(db.String(255), nullable=False, unique=True)
# 推荐人地址【数据库的推荐地址是可以重复的,一个人可以推荐无数个】
referrer_address = db.Column(db.String(255), nullable=False)
# 建立表一对一双向关系表
child_a_model = db.relationship(
"ChildAModel", backref='parent_model', lazy=True)
child_b_model = db.relationship(
"ChildBModel", backref='parent_model')
# 关联一个外键的方法
class ChildAModel(Base):
address = db.Column(db.String(255), db.ForeignKey(
'parent_model.address'), nullable=False, unique=True)
# 【非常重要】这里的推荐地址在添加的时候自动从ReferrerRelationNetworkModel获取,会强制覆盖表单传入的
referrer_address = db.Column(db.String(255), nullable=False)
# 关联一个外键的方法
class ChildBModel(Base):
address = db.Column(db.String(255), db.ForeignKey(
'parent_model.address'), nullable=False, unique=True)