代码之家  ›  专栏  ›  技术社区  ›  benvc

sqlalchemy joinedload:加载与查询表分离度超过1度的多个关系的语法?

  •  4
  • benvc  · 技术社区  · 6 年前

    使用sqlalchemy有更简洁的语法吗 joinedload

    例如,使用熟悉的问题、答案等数据结构,有没有比下面的示例更简洁的方法来查询问题、急切地加载相关答案以及急切地加载答案注释和答案投票(在本例中,假设这两个答案相关项都包含在单独的表中)?

    from sqlalchemy.orm import joinedload
    
    result = session.query(Question).\
        options(
           joinedload(Question.answers).
           joinedload(Answer.comments)
           ).\
        options(
           joinedload(Question.answers).
           joinedload(Answer.votes)
           ).\
        filter(Question.id == '1').\
        first()
    

    我找不到任何通过中间表加载多个表的示例 Relationship Loading Techniques (或者在其他任何地方)。我尝试在一个单独的子关系中包含多个子关系 联合载荷 喜欢

    result = session.query(Question).\
        options(joinedload(Question.answers, Answer.comments, Answer.votes)).\
        filter(Question.id == '1').\
        first()
    

    ...但毫不奇怪,这种方法只是将连接链连在一起。

    0 回复  |  直到 4 年前
        1
  •  4
  •   benvc    4 年前

    你想要 Load.options()

    那么您的代码将类似于:

    result = session.query(Question).\
        options(
            joinedload(Question.answers).\
            options(
                joinedload(Answer.comments),
                joinedload(Answer.votes)
                )
            ).\
        filter(Question.id == '1').\
        first()