【问题标题】:Reference query results with outerjoin in Flask/SQLAlchemy/jinja在 Flask/SQLAlchemy/jinja 中使用外连接引用查询结果
【发布时间】:2013-07-29 10:11:09
【问题描述】:

我有以下疑问:

last_entry = Table.query \
                  .group_by(Table.email) \
                  .order_by(Table.date) \
                  .subquery()

results = db.session.query(User, last_entry.c.id)  \
    .outerjoin(last_entry, User.email == last_entry.c.email)

这将获取所需的数据,但是我无法访问此“last_entry”行数据。如何让它显示在模板中?

我用这条线渲染它:

return render_template('users.html', users=results.all())

我用user['last_entry'] 和类似的东西尝试了一些解决方案,但没有成功。我可以访问用户表中的数据,只需使用用户表中的字段,如user['first_name'],但不能对连接表执行相同操作。

【问题讨论】:

    标签: python mysql sqlalchemy flask jinja2


    【解决方案1】:

    session.query() 中,您应该指定要在结果中看到的实体列表:

    results = db.session.query(User, last_entry).outerjoin(last_entry, User.email == last_entry.c.email)
    

    或者,您可以使用add_entity()

    results = session.query(User).outerjoin(last_entry, User.email == last_entry.c.email).add_entity(last_entry)
    

    希望对您有所帮助。

    【讨论】:

    • 嗯,第一个建议看起来也和我的一样?但我仍然无法访问该last_entry 值。它应该是user['last_entry']?
    • 应该是。顺便说一句,您可以尝试将results 原样传递给模板,例如return render_template('users.html', users=results)
    • 这让我找到了正确的答案。当我通过“用户中的用户”时,解决方案是引用 user.Class.property,我添加的附加字段是可用的 user.id,这就解决了这个问题。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2016-05-08
    • 2019-12-13
    • 1970-01-01
    • 2017-06-08
    • 2016-07-02
    • 1970-01-01
    • 1970-01-01
    • 2021-03-28
    相关资源
    最近更新 更多