2011-07-19 25 views
8

私は宣言型SQLAlchemyを使用しており、Role,Permission、およびRolePermissionという3つのモデルがあります。私のRoleモデルでは、私は次があります。SQLAlchemy - 結合テーブルの関係のorder_by

​​

permissions宣言が正常に動作し、私は(名前で)期待するような役割に関連付けられた権限は、ソートを出てきます。しかし、permissionLinksは、次のエラーで失敗します。

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,)

問題は、それがRole.nameでソートすることはできませんのでRoleが、参加されていないことです。私はprimaryjoin=id == RolePermission.id1と指定しようとしましたが、それは何も変えていないようです。この関係の結合を指定して、結合テーブルの1つのフィールド(つまり、Role.name)でソートできるようにするにはどうすればよいですか?

答えて

0

問題はpermissionLinksの関係にあります。 Role.nameで商品を注文することは私には意味がありません。

+0

私は与えられた権限に関連するすべての 'RolePermission'行を表示したい、と私は彼らがRole.name''の順に表示します。現在、私はDBから結果を取得した後にソートしますが、SQLAlchemyを使用して結果を得られるはずです。 'RolePermission'には' Permission'には作成日、作成者などの情報があるので、 'Permission'行だけでなく' RolePermission'行も表示します。 –

+0

しかし、サンプルコードでは、指定された_role_に関連付けられた 'RolePermission'オブジェクトをソートしようとしています。 –

+0

右。それぞれの 'RolePermission'に' Role'があるので、なぜ 'Role'のプロパティで' RolePermission'sをソートできないのでしょうか? –

6

必要なのは、RolePermissionオブジェクトのrole属性を順序付けることです。 order_byを渡すと、Roleクラスの順序が設定されます。

これを試してみてください:

from sqlalchemy.orm import backref 

permissionLinks = relationship(RolePermission, backref=backref("role", order_by=name)) 

後方参照

+0

これは私のために働いた –

14

私はこれらのソリューションのいずれかを動作させることができませんでした、しかし、私は簡単な方法を発見したために順序を設定。ここで見つける

from sqlalchemy.ext.declarative import declarative_base 

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

http://docs.sqlalchemy.org/en/latest/orm/extensions/declarative/relationships.html

+2

ハハ!この問題に遭遇し、あなたの答えを見つけました!あなただけが働いています! – nathancahill

関連する問題