【发布时间】:2011-07-19 16:00:37
【问题描述】:
我正在使用声明性 SQLAlchemy,我有三个模型:Role、Permission 和 RolePermission。在我的Role 模型中,我有以下内容:
class Role(Base):
name = Column(u'NAME', VARCHAR(50), nullable=False, unique=True)
permissionLinks = relationship(RolePermission, backref="role", order_by=name)
permissions = relationship(Permission, backref=backref("roles",
order_by=name), secondary=RolePermission.__table__,
order_by=Permission.name)
现在permissions 声明工作正常,与角色关联的权限按我预期的方式排序(按名称)。但是,permissionLinks 失败并出现以下错误:
sqlalchemy.exc.ProgrammingError: (ProgrammingError) ('42000', '[42000] [Microsoft][ODBC SQL Server Driver][SQL Server]无法绑定多部分标识符“ROLES.NAME”。( 4104) (SQLExecDirectW); [42000] [Microsoft][ODBC SQL Server Driver][SQL Server]无法准备语句。(8180)') u'SELECT [ROLES_PERMISSIONS].[ROLE_ID] AS [ROLES_PERMISSIONS_ROLE_ID] , [ROLES_PERMISSIONS].[PERMISSION_ID] AS [ROLES_PERMISSIONS_PERMISSION_ID], [ROLES_PERMISSIONS].[IS_DENIED] AS [ROLES_PERMISSIONS_IS_DENIED] \nFROM [ROLES_PERMISSIONS] \nWHERE [ROLES_PERMISSIONS].[ROLE_ID] = ?按 [角色] 排序。[名称]' (19,)
问题是Role 没有被加入,所以它不能按Role.name 排序。我尝试指定primaryjoin=id == RolePermission.id1,但这似乎并没有改变任何东西。如何指定此关系的联接,以便我可以按联接表之一(即Role.name)中的字段排序?
【问题讨论】:
标签: python sql model sqlalchemy declarative