4

sqlalchemy に 3 つのテーブルがあるとします。宣言的な方法で定義されたユーザー、ロール、およびユーザーロール。このようなことをすることについてどのように提案しますか:

user = Users.query.get(1) # get user with id = 1
user_roles = user.roles.query.limit(10).all()

現在、ユーザーの役割を取得したい場合は、期待される結果を得るために、3 つのテーブルのいずれかにクエリを実行し、結合を実行する必要があります。直接呼び出すuser.rolesと、フィルタリングまたは制限できないアイテムのリストが表示されるため、あまり役に立ちません。次のようなリクエストでレストインターフェースを作成しようとしているので、結合もあまり役に立ちません。 localhost/users/1/rolesそのため、そのクエリだけで、Users.query.get(1).roles.limit(10) etc etc肥大化したコードなしでレストインターフェースを本当に「スマートアップ」する必要があります。 if 条件付きで、どのテーブルに参加するかを知る必要はありません。ユーザー モデルには関係プロパティとしてロールが既に含まれているのに、通常のモデルの場合と同じように関係プロパティを単純にクエリできないのはなぜでしょうか?

4

1 に答える 1

13

Dynamic Relationship Loadersを使用するだけです。上記にリンクされているドキュメントからの逐語的な以下のコード:

class User(Base):
    __tablename__ = 'user'

    posts = relationship(Post, lazy="dynamic")

jack = session.query(User).get(id)

# filter Jack's blog posts
posts = jack.posts.filter(Post.headline=='this is a post')

# apply array slices
posts = jack.posts[5:20]
于 2012-06-17T21:37:41.200 に答える