【问题标题】:sqlalchemy relations and query on relationssqlalchemy 关系和关系查询
【发布时间】:2012-06-16 01:38:13
【问题描述】:

假设我在 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 这真的应该“智能”我的休息界面,没有太多臃肿的代码和条件,也不必知道哪个表加入什么。用户模型已经将角色作为关系属性,为什么我不能像使用普通模型那样简单地查询关系属性?

【问题讨论】:

    标签: sqlalchemy


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-11
      • 2019-01-18
      • 2015-03-10
      • 2014-01-25
      • 1970-01-01
      相关资源
      最近更新 更多