【发布时间】:2016-08-06 06:50:08
【问题描述】:
我正在使用 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上有其他类似的问题,但尝试了不同的建议,但没有运气。我已经尝试按照建议的错误进行操作,并使用了我以前的问题here on SO,但即使放置 foreign_keys 选项似乎也不起作用,尽管我必须承认我真的在猜测放置它的位置。
SQLAlchemy 版本 ==1.0.12,Postgresql 9.5
【问题讨论】:
标签: python postgresql sqlalchemy