sqlalchemy 多对多关系

来源:互联网 发布:珠海网络推广发哥 编辑:程序博客网 时间:2024/05/16 08:16

一个用户有多个角色,一个角色有多个用户


# 用户角色 多对多关系sys_user_role = Table('sys_user_role', Base.metadata,                      Column('sys_user_id', ForeignKey('sys_user.id'), primary_key=True),                      Column('role_id', ForeignKey('role.id'), primary_key=True)                      )


# 用户class SysUser(Base):    __tablename__ = 'sys_user'    id = Column(UUID, primary_key=True, default=lambda: str(uuid.uuid4()))    username = Column(String(80), unique=True)    password = Column(String(80), unique=False)    nickname = Column(String(80), unique=False)    token = Column(String(80), unique=True)    login_time = Column(DateTime(), unique=False)    # many to many SysUser<->Role    roles = relationship('Role',                         secondary=sys_user_role,                         back_populates='sys_users')    def __init__(self, username, password, nickname):        self.username = username        self.password = password        self.nickname = nickname    def __repr__(self):        return "<User(username='%s', password='%s', nickname='%s')>" % (self.username, self.password, self.nickname)

# 角色class Role(Base):    __tablename__ = 'role'    id = Column(UUID, primary_key=True, default=lambda: str(uuid.uuid4()))    role = Column(String(80), unique=True)    nickname = Column(String(80), unique=False)    sys_users = relationship('SysUser',                         secondary=sys_user_role,                         back_populates='roles')    permits = relationship('Permit',                             secondary=role_permit,                             back_populates='roles')    def __init__(self, role, nickname):        self.role = role        self.nickname = nickname    def __repr__(self):        return "<Role(nickname='%s')>" % self.nickname


原创粉丝点击