繁体   English   中英

无法获取HTML以使用python和flask显示SQLite3数据

[英]Cannot get HTML to display SQLite3 data with python & flask

我在使用HTML和Flask获取HTML页面以显示我的SQLite3数据时遇到问题。 我在这里发现了一个问题,并使用了相同的代码,外加不同的变体而没有成功。 没有错误消息,并且HTML页面已加载,但是没有数据。 这是我用来获取数据的代码;

@app.route("/viewpackages", methods=['GET'])
def viewpackages():
    con = sqlite3.connect('utpg.db')
    db = con.cursor()
    user_id = session.get('id')
    getpackages = db.execute("SELECT pck_id, client_id, date, price,  privatelesson,"
                             "shortgamelesson, playinglesson, notes FROM packages WHERE client_id = ?;", (user_id, ))

    return render_template("view_packages.html", items=getpackages.fetchall())

这是我试图用来显示数据的代码;

<table>
{% for item in items %}
<tr>
    <td>{{column1}}</td>
    <td>{{column2}}</td>
    <td>{{column3}}</td>
    <td>{{column4}}</td>
    <td>{{column5}}</td>
    <td>{{column6}}</td>
    <td>{{column7}}</td>
    <td>{{column8}}</td>
</tr>
{% endfor %}
</table>

我尝试将“ column”更改为实际的数据库列名称,但存在相同的问题。 我尝试调用SELECT *而不是每个单独的列,同样的问题。 如果我在python中运行此代码;

con = sqlite3.connect('utpg.db')
db = con.cursor()
user_id = session.get('id')
getpackages = db.execute("SELECT pck_id, client_id, date, price,    privatelesson, shortgamelesson, playinglesson, notes FROM   packages WHERE        client_id = ?;", (user_id, ))
packages = getpackages.fetchall()
for row in packages:
     print(row)

它返回期望的结果。 因此,我认为某个地方的HTML存在问题,但我无法弄清楚。

请尝试以下代码,让我知道它是否适合您:

<table>
{% for item in items %}
<tr>
    <td>{{ item[0] }}</td>
    <td>{{ item[1] }}</td>
    <td>{{ item[2] }}</td>
    <td>{{ item[3] }}</td>
    <td>{{ item[4] }}</td>
    <td>{{ item[5] }}</td>
    <td>{{ item[6] }}</td>
    <td>{{ item[7] }}</td>
</tr>
{% endfor %}
</table>

使用以下代码进行测试:

app.py

from flask import Flask, render_template
import sqlite3

app = Flask(__name__)
app.secret_key = 'development key'


@app.route('/users')
def get_users():
    con = sqlite3.connect('mydb.db')
    db = con.cursor()
    db.execute('insert into user values ("Aaa", "AAA")')
    db.execute('insert into user values ("Bbb", "BBB")')
    res = db.execute('select * from user')
    return render_template('users.html', users=res.fetchall())

if __name__ == "__main__":
    app.run(host="0.0.0.0", debug=True)

template / users.html

<html !DOCTYPE>
<head>
<title>SQLite</title>
</head>
<body>
<table>
{% for user in users %}
<tr>
    <td>{{ user[0] }}</td>
    <td>{{ user[1] }}</td>
</tr>
{% endfor %}
</table>
</body>
</html>

这是我必须要做的。对于其他遇到此问题的人,我不知道为什么,但是Jinja不想让我按索引访问,所以我这样做了。

@app.route("/viewpackages", methods=['GET'])
def viewpackages():
con = sqlite3.connect('utpg.db')
con.row_factory = sqlite3.Row
db = con.cursor()
user_id = session.get('id')
getpackages = db.execute("SELECT pck_id, client_id, date, price, privatelesson,"
                         "shortgamelesson, playinglesson, notes FROM packages WHERE client_id = ?;", (user_id, ))

return render_template("view_packages.html", items=getpackages.fetchall())

并将HTML更改为。

<table>
{% for col in items %}
<tr>
<td>{{ col['pck_id'] }}</td>
<td>{{ col['client_id'] }}</td>
<td>{{ col['date'] }}</td>
<td>{{ col['price'] }}</td>
<td>{{ col['privatelesson'] }}</td>
<td>{{ col['shortgamelesson'] }}</td>
<td>{{ col['playinglesson'] }}</td>
<td>{{ col['notes'] }}</td>
</tr>
{% endfor %}
</table>

现在一切正常,感谢您为我指明了正确的方向!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM