【问题标题】:reading column names from joined query in flask-sqlalchemy从 flask-sqlalchemy 中的连接查询中读取列名
【发布时间】:2018-09-20 10:23:26
【问题描述】:

所以我在这里有这么长的查询:

showings = db.execute("SELECT showings.cinema_id, showings.movie_id,\
                       cinemas.name, movies.name FROM showings JOIN\
                       cinemas ON showings.cinema_id=cinemas.id JOIN\
                       movies ON showings.movie_id=movies.id WHERE\
                       showings.id = :id", 
                      {"id": cinema_id}).fetchall()
return render_template("showings.html", showings2=showings2)

然后在模板中:

{% for showing in showings2 %}
   <option value="{{ showing.id }}">
     {{ showing.name }} @{{ showing.name }}
   </option>
{% endfor %}

问题是由于两个不同表中的列名相同,当前模板两次返回相同的内容,即cinema.name的值 有什么办法绕过它吗?

【问题讨论】:

标签: python sqlalchemy jinja2


【解决方案1】:

使用别名重命名列:

showings = db.execute(
    """SELECT showings.cinema_id
            , showings.movie_id
            , cinemas.name AS cinema_name
            , movies.name AS movie_name
       FROM   showings 
       JOIN   cinemas ON showings.cinema_id=cinemas.id
       JOIN   movies ON showings.movie_id=movies.id
       WHERE  showings.id = :id""", {"id": cinema_id}).fetchall()

并在模板中使用上述别名:

<option value="{{ showing.id }}">
    {{ showing.cinema_name }} @ {{ showing.movie_name }}
</option>

【讨论】:

  • sooooo...我知道如何进行双重连接,但不知道别名的存在。非常感谢。
  • 另一种选择是使用它们的位置来引用结果列,但这更容易出错;如果你碰巧改变了查询,位置可能会改变,代码可能会中断。
猜你喜欢
  • 2017-05-29
  • 2021-08-18
  • 2019-12-13
  • 1970-01-01
  • 2012-07-16
  • 2015-03-10
  • 2016-05-08
  • 2017-06-08
  • 1970-01-01
相关资源
最近更新 更多