首页 > 解决方案 > 如何在 sqlalchemy 中使用带有多个连接路径的 backref

问题描述

我的目标是列出所有具有特定功能的用户user_type以及角色组模型中附加到用户的角色列表

class Rolegroup(Base):
    __tablename__ = "rolegroup"
    __table_args__ = {'comment': 'rgp'}

    id=Column(Integer, primary_key=True, index=True)
    group_id=Column(Integer, ForeignKey("group.id"))
    user_id=Column(UUID(as_uuid=True), ForeignKey("users.id"), index=True)    
    created_by_id=Column(UUID(as_uuid=True), ForeignKey("users.id"))
    updated_by_id=Column(UUID(as_uuid=True), ForeignKey("users.id"))
    created_date=Column(DateTime, default=datetime.now)
    updated_date=Column(DateTime, onupdate=datetime.now)
    deleted=Column(Boolean, default=False)
    updated_by=relationship("User", foreign_keys=[updated_by_id])
    users_role=relationship("User", foreign_keys=[user_id])





class User(Base):
    __tablename__="users"

    id = Column(UUID(as_uuid=True),default=uuid.uuid4, primary_key=True, index=True)
    first_name = Column(String)
    last_name = Column(String)
    username = Column(String, index=True, nullable=False)  #username is email 
    password = Column(String, nullable=False)
    is_active = Column(Boolean(), default=False)
    is_superuser = Column(Boolean(), default=False)
    created = Column(DateTime(), default=datetime.now)
    mobile = Column(String(15))
    user_type_id = Column(Integer, ForeignKey("user_type.id"))
    verify_code=Column(String(100))
    profile_completed=Column(Boolean, default=False )
    profile_approved=Column(Boolean, default=False)    
    user_type_name= relationship("UserType",backref="users")
    userrole= relationship("Rolegroup",  backref="userrole") 

当我尝试对其执行任何查询时 - 它显示以下错误:

sqlalchemy.exc.AmbiguousForeignKeysError:无法确定关系 User.userrole 上的父/子表之间的连接条件 - 有多个外键路径链接表。指定“foreign_keys”参数,提供那些列的列表,这些列应该被视为包含对父表的外键引用

当没有额外的 user.id 作为 foreignKey 关系时,它工作得很好。我已经尝试删除角色组模型中的额外字段并且效果很好

标签: pythonsqlalchemyfastapimultiple-join-rows

解决方案


推荐阅读