显示<sqlite3.Row对象>而不是数据库内容

9 投票
1 回答
11686 浏览
提问于 2025-04-18 07:32

我的模板是这样的:

  {% for order in orders %}
    <li><h2>{{ order}}</h2>
  {% endfor %}

而我的路由函数是这样的:

@app.route('/order_history')
def orderhistory():
    db = get_db()
    cur = db.execute('select * from order_items')
    orders = cur.fetchall()
    return render_template('order_history.html', orders = orders)

有人知道为什么我得到的是行对象的位置,而不是数据库里的内容吗?

1 个回答

10

你需要从这些行中获取数据:

{% for order in orders %}
  <li><h2>{{ order[0] }}</h2></li>
{% endfor %}

SQL查询总是以行的形式返回数据,每行包含多个列。上面的内容假设你的SELECT语句每行只返回了一列数据。

如果你有多列数据,你就需要用直接的索引来访问这些列(比如order[1]order[3]等),或者通过循环遍历这一行来显示所有的列:

{% for order in orders %}
  <li><h2>{{ order[0] }}</h2>
      {% for column in order %}
          {% if not loop.first %}{{ column }}<br />{% endif %}
      {% endfor %}
  </li>
{% endfor %}

撰写回答