[英]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_id
, AppUserRole.deleted_by
和AppUserRole.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.