多对多关联

 

 

在 SQLAlchemy 中,要想表示多对多关系,除了关系两侧的模型外,我们还需要创建一个关联表
(middle_table)。关联表不存储数据,只用来存储关系两侧模型的外键对应关系。

# 多对多关联,先定义中间表(没有对应的模型类)
middle_table = Table(
't_user_role',
Base.metadata,
Column('user_id', ForeignKey('t_user.id'), primary_key=True), # 联合主键
Column('role_id', ForeignKey('t_role.id'), primary_key=True),
)
class User(Base):
# 用户和角色之间是多对多关系, 一个用户可以拥有多个角色,一个角色可以所属多个用户
"""用户的模型类"""
__tablename__ = 't_user'
id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
username: Mapped[str] = mapped_column(String(20), unique=True,
nullable=False)
password: Mapped[str] = mapped_column(String(20), nullable=False)
# 一个用户有多个角色
roles: Mapped[Optional[List['Role']]] =
relationship(secondary=middle_table, back_populates='users')
class Role(Base):
"""角色的模型类"""
__tablename__ = 't_role'
id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
name: Mapped[str] = mapped_column(String(20), unique=True, nullable=False,
comment='角色的名字')
# 一个角色被多有用户所拥有
users: Mapped[Optional[List['User']]] =
relationship(secondary=middle_table, back_populates='roles')

 

posted @ 2024-07-09 16:48  yongheng999  阅读(63)  评论(0)    收藏  举报