假设我在sqlalchemy中有3个表。以声明方式定义的用户,角色和UserRoles。如何建议这样做:

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


当前,如果我想获得用户角色,则必须查询3个表中的任何一个并执行联接才能获得预期的结果。直接调用user.roles会带来我无法过滤或限制的项目列表,因此它不是很有帮助。联接事物也不是很有帮助,因为我正尝试通过以下请求创建一个rest接口:
localhost/users/1/roles因此,仅通过该查询,我就需要能够执行Users.query.get(1).roles.limit(10) etc etc,它确实应该“精简”我的rest接口,而不会过多地膨胀代码,是否有条件并且不必知道要在哪个表上进行联接。用户模型已经具有作为关系属性的角色,所以为什么不能像对普通模型一样简单地查询关系属性?

最佳答案

只需使用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]

10-07 13:23
查看更多