Cho*_*key 17 many-to-many sqlalchemy model-associations flask flask-sqlalchemy
我开始从Flask Mega Tutorial中学习这些东西.当他进入多对多关系时,他会创建一个如下关联表:
followers = db.Table('followers',
db.Column('follower_id', db.Integer, db.ForeignKey('user.id')),
db.Column('followed_id', db.Integer, db.ForeignKey('user.id'))
)
Run Code Online (Sandbox Code Playgroud)
当我在寻找添加一些关于模型之间特定关联的元数据的方法时,我发现你可以在关联表中存储这种东西.但是我发现的这个例子似乎使得关联表成为一个真实的模型.
class DepartmentEmployeeLink(Base):
__tablename__ = 'department_employee_link'
department_id = Column(Integer, ForeignKey('department.id'), primary_key=True)
employee_id = Column(Integer, ForeignKey('employee.id'), primary_key=True)
extra_data = Column(String(256))
department = relationship(Department, backref=backref("employee_assoc"))
employee = relationship(Employee, backref=backref("department_assoc"))
Run Code Online (Sandbox Code Playgroud)
这两种方法有什么区别?将元数据存储在关联表中是否需要模型方法,或者使用top方法可以完成同样的事情?
谢谢!
Cho*_*key 28
道歉,我终于在SQLAlchemy文档中偶然发现了答案......
https://docs.sqlalchemy.org/en/latest/orm/basic_relationships.html#many-to-many
......他们明确定义差异:
Many to Many在两个类之间添加了一个关联表.
association_table = Table('association', Base.metadata,
Column('left_id', Integer, ForeignKey('left.id')),
Column('right_id', Integer, ForeignKey('right.id'))
)
Run Code Online (Sandbox Code Playgroud)
关联对象模式是多对多的变体:当关联表包含除左表和右表外键之外的其他列时使用它.您可以将新类直接映射到关联表,而不是使用辅助参数.
class Association(Base):
__tablename__ = 'association'
left_id = Column(Integer, ForeignKey('left.id'), primary_key=True)
right_id = Column(Integer, ForeignKey('right.id'), primary_key=True)
extra_data = Column(String(50))
left = relationship('Left', backref=backref('right_association'))
right = relationship('Right', backref=backref('left_association'))
Run Code Online (Sandbox Code Playgroud)
"右"和"左"是表,通常定义:
class Left(Base):
__tablename__ = 'left'
id = Column(Integer, primary_key = True)
...
class Right(Base):
__tablename__ = 'right'
id = Column(Integer, primary_key = True)
...
Run Code Online (Sandbox Code Playgroud)
因此,如果您需要在关联中存储任何内容,它基本上创建一个关联对象来引用这些额外信息,否则不必使用ORM层,您只需创建一个关联表.
| 归档时间: |
|
| 查看次数: |
5474 次 |
| 最近记录: |