sqlalchemy关系和关系查询

时间:2012-06-16 01:38:13

标签: sqlalchemy

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

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真正应该“智能化”我的休息界面,而不需要过多的代码和条件,并且无需知道要加入哪个表什么。用户模型已经具有作为关系属性的角色,那么为什么我不能简单地查询关系属性,就像我使用普通模型一样?

1 个答案:

答案 0 :(得分:11)

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