【问题标题】:<sqlite3.Row object at 0x1017fe3f0> instead of database contents<sqlite3.Row object at 0x1017fe3f0> 而不是数据库内容
【发布时间】:2014-07-14 11:24:36
【问题描述】:

我的模板是这样的:

  {% 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)

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

【问题讨论】:

    标签: python sqlite flask


    【解决方案1】:

    您需要行获取数据:

    {% 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 %}
    

    【讨论】:

    • 除此之外还有其他使用直接索引的选项:&lt;li&gt;&lt;h2&gt;{{ order[0], order[1], order[2] }}&lt;/h2&gt;?我问的原因是因为它给了我一个奇怪的输出:(1, u'JKL', u'Chilli Peppers')
    • 你在那里使用了一个元组。使用单独的插值,{{ order[0] }} {{order[1] }} 等。
    猜你喜欢
    • 1970-01-01
    • 2021-05-05
    • 2019-11-18
    • 2013-05-05
    • 1970-01-01
    • 1970-01-01
    • 2019-04-17
    • 2012-08-09
    • 2020-02-23
    相关资源
    最近更新 更多