SQLAlchemy的关系和关系查询

4
假设我在SQLAlchemy中有3个表:用户、角色和用户角色,以声明方式定义。如何实现以下操作?
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)等等,这应该可以使我的rest接口变得更加智能化,而不需要过多的膨胀代码和条件语句,也不需要知道要在哪个表上进行联接。Users模型已经将角色作为关系属性,为什么不能像使用普通模型那样查询关系属性呢?

1个回答

13

直接使用动态关系加载器即可。以下代码完全来自上面链接的文档:

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]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接