簡體   English   中英

SQLAlchemy多對多關系參數

[英]SQLAlchemy Many to Many relationship parameter

我正在使用SQLAlchemy ORM來獲取屬於某個用戶的角色,但是卻收到以下錯誤

無法確定關系AppRole.users上的父/子表之間的聯接條件-有多個外鍵路徑通過輔助表'app_user_role'鏈接表。 指定“ foreign_keys”參數,提供這些列的列表,這些列應被視為包含從輔助表到父表和子表中每個表的外鍵引用。

這些表定義為:

class AppUserRole(Base_Write):
    __tablename__ = 'app_user_role'
    id = Column(Integer, primary_key=True)
    created_at = Column(DateTime, server_default=text('NOW()'), nullable=False)
    created_by = Column(Integer, ForeignKey('app_user.id'), nullable=False)
    is_deleted = Column(Boolean, server_default='0', nullable=False)
    date_deleted = Column(DateTime)
    deleted_by = Column(Integer, ForeignKey('app_user.id'))
    user_id = Column(Integer, ForeignKey('app_user.id'), nullable=False)
    role_id = Column(Integer, ForeignKey('app_role.id'), nullable=False)
    date_assigned = Column(DateTime, nullable=False)


class AppRole(Base_Write):
    __tablename__ = 'app_role'
    id = Column(Integer, primary_key=True)
    created_at = Column(DateTime, server_default=text('NOW()'), nullable=False)
    created_by = Column(Integer)
    is_deleted = Column(Boolean, server_default='0', nullable=False)
    date_deleted = Column(DateTime)
    deleted_by = Column(Integer, ForeignKey('app_user.id'))
    role_classification_id = Column(Integer, ForeignKey('app_role_classification.id'), nullable=False)
    role_code = Column(String(10), nullable=False, unique=True)
    role_name = Column(String(30), nullable=False)

    users = relationship("AppUser", secondary="app_user_role", back_populates="app_role")


class AppUser(Base_Write):
    __tablename__ = 'app_user'
    id = Column(Integer, primary_key=True)
    created_at = Column(DateTime, server_default=text('NOW()'), nullable=False)
    created_by = Column(Integer, ForeignKey('app_user.id'), nullable=False)
    is_deleted = Column(Boolean, server_default='0', nullable=False)
    date_deleted = Column(DateTime)
    deleted_by = Column(Integer, ForeignKey('app_user.id'))
    username = Column(String(50), nullable=False, unique=True)

    roles = relationship("AppRole", secondary="app_user_role", back_populates="app_user")

正在運行的查詢是:

for app_user in session.query(AppUser).\
filter(AppUser.is_deleted == False).filter(AppUser.id == user_id):
    #print the names of the roles assigned
    print(app_user.roles.role_name)

問題是,我還有其他表在其中定義了其他“多對多”關系參數,並且一切正常。 在這里,盡管我不斷收到該錯誤。 SO上還有其他類似的問題,但是嘗試了不同的建議,但沒有運氣。 我已經嘗試過按照建議的錯誤進行操作,並在SO上使用了我的一個問題,但是即使我必須承認我確實在猜測將其放置在何處,即使將foreign_keys選項也似乎無效。

SQLAlchemy版本== 1.0.12,Postgresql 9.5

如錯誤消息所述,您有多個將AppRole鏈接到AppUser外鍵,即AppUserRole.user_idAppUserRole.deleted_byAppUserRole.created_by ,因此您需要指定foreign_keys參數:

class AppRole(Base):
    ...
    users = relationship("AppUser", secondary="app_user_role", 
                         foreign_keys=[AppUserRole.user_id, AppUserRole.role_id],
                         back_populates="roles")


class AppUser(Base):
    ...
    roles = relationship("AppRole", secondary="app_user_role",
                         foreign_keys=[AppUserRole.user_id, AppUserRole.role_id],
                         back_populates="users")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM