SQLAlchemy - 关于连接表的关系的order_by

Sar*_*els 15 python sql model sqlalchemy declarative

我使用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)
Run Code Online (Sandbox Code Playgroud)

现在permissions声明工作正常,与角色关联的权限按照我的预期(按名称)排序.但是,permissionLinks失败并出现以下错误:

sqlalchemy.exc.ProgrammingError :( ProgrammingError)('42000','[42000] [Microsoft] [ODBC SQL Server驱动程序] [SQL Server]无法绑定多部分标识符"ROLES.NAME".(4104)( SQLExecDirectW); [42000] [Microsoft] [ODBC SQL Server驱动程序] [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] \nWHERHER [ROLES_PERMISSIONS].[ROLE_ID] =?订单[ROLES].[NAME]'(19,)

问题是Role没有加入,所以它无法排序Role.name.我尝试过指定primaryjoin=id == RolePermission.id1,但这似乎没有改变任何东西.如何在此关系上指定连接,以便我可以按其中一个连接表(即Role.name)中的字段进行排序?

Nic*_*ams 23

我无法使这些解决方案中的任何一个工作,但我找到了一种更简单的方法.

from sqlalchemy.ext.declarative import declarative_base

class User(Base):
    # ....
    addresses = relationship("Address",
                         order_by="desc(Address.email)",
                         primaryjoin="Address.user_id==User.id")
Run Code Online (Sandbox Code Playgroud)

在此处找到:http: //docs.sqlalchemy.org/en/latest/orm/extensions/declarative/relationships.html

  • 哈哈!陷入这个问题,找到了答案!你的是唯一有效的! (2认同)

小智 7

您想要的是订购RolePermission对象的角色属性.传递order_by设置Role类中的顺序.

试试这个:

from sqlalchemy.orm import backref

permissionLinks = relationship(RolePermission, backref=backref("role", order_by=name))
Run Code Online (Sandbox Code Playgroud)

设置后向参考的顺序


Den*_*ach 0

问题出在permissionLinks关系上。按 by 订购商品Role.name对我来说毫无意义。