Estoy usando SQLAlchemy declarativo y tengo tres modelos: Role
, Permission
y RolePermission
. En mi modelo Role
, tengo el siguiente:SQLAlchemy - order_by on relationship for join table
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)
Ahora la declaración permissions
funciona bien, y los permisos asociados con un papel sale como espero ordenada (por su nombre). Sin embargo, permissionLinks
falla con el siguiente error:
sqlalchemy.exc.ProgrammingError: (ProgrammingError) ('42000', '[42000] [Microsoft][ODBC SQL Server Driver][SQL Server]The multi-part identifier "ROLES.NAME" could not be bound. (4104) (SQLExecDirectW); [42000] [Microsoft][ODBC SQL Server Driver][SQL Server]Statement(s) could not be prepared. (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] = ? ORDER BY [ROLES].[NAME]' (19,)
El problema es que no está siendo unieron Role
, por lo que no se puede ordenar por Role.name
. Intenté especificar primaryjoin=id == RolePermission.id1
, pero eso no pareció cambiar nada. ¿Cómo puedo especificar una unión en esta relación para poder ordenar por un campo en una de las tablas unidas (a saber, Role.name
)?
quiero mostrar todas las filas 'RolePermission' asociados con un permiso dado, y quiero que se muestran en orden de' Role.name'. Actualmente los clasifico después de obtener los resultados de la base de datos, pero parece que debería poder hacer eso con SQLAlchemy. Muestro las filas 'RolePermission' y no solo las filas' Permiso' (a través de 'permisos') porque' RolePermission' tiene información sobre la fecha de creación, creador, etc. que 'Permiso' no tiene. –
Pero en el código de muestra está intentando ordenar los objetos 'RolePermission' asociados con _role_ dado. –
Derecha. Parece que eso debería ser factible, porque cada 'RolePermission' tiene un' Role', así que ¿por qué no puedo ordenar 'RolePermission's por una propiedad en' Role'? –