在 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')
标签:角色,column,Mapped,关联,mapped,True,id From: https://www.cnblogs.com/yongheng999/p/18292286