【发布时间】:2017-02-10 20:10:19
【问题描述】:
我正在开发一个 Web 应用程序并遇到以下代码的一些问题。我有一个需要更新值的数据库。当我尝试更新值时,我得到一个索引超出范围错误,但是当我只使用 python 运行代码而不使用 web 部件时,它运行并按预期执行。我无法弄清楚当我尝试它时发生了什么变化部分包含烧瓶和 HTML 表单。这是我更新数据库的代码;
编辑:: 经过更多测试后,将我需要的数据推送回 /poplesson 的表单似乎存在一些问题。如果更改这些行;
user_id = request.form['clientid']
pck_id = request.form['packageid']
到
user_id = 1
pck_id = 1
它将按计划工作,但这不是我需要的,因为我需要从数据库中提取这些 ID。
@app.route("/poplesson", methods=['GET', 'POST'])
def poplesson():
if request.method == 'GET':
return render_template('view_packages.html')
elif request.method == 'POST':
con = sqlite3.connect('utpg.db')
db = con.cursor()
user_id = request.form['clientid']
pck_id = request.form['packageid']
package = db.execute("SELECT * FROM packages WHERE client_id = ?;", (user_id, ))
result = package.fetchall()
privatelessons = result[0][4] ##Without flask this run, with flask this throws an index error.
pop = privatelessons - 1
db.execute("UPDATE packages SET privatelesson = ? WHERE client_id = ? AND pck_id = ?;", (pop, user_id, pck_id, ))
con.commit()
return render_template('view_packages.html')
这是我用来显示 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>
<td><form class="form-container" action="/deletepackage" method="POST">
<input class="form-field" value="{{ col['pck_id'] }}" name="packageid" /> <br />
<input class="submit-button" type="submit" value="DELETE Package" /> </form>
</td>
<td><form class="form-container" action="/poplesson" method="POST">
<input class="form-field" value="{{ col['client_id'] }}" name="clientid" /> <br />
<input class="form-field" value="{{ col['pck_id'] }}" name="packageid" />
<input class="submit-button" type="submit" value="Subtract Private Lesson" /></form></td>
</tr>
{% endfor %}
</table>
</body>
如果我只在 python 中执行此部分,它会按预期运行,并且使用查看的数据库我可以看到数据库已更新。有什么想法吗?
con = sqlite3.connect('utpg.db')
db = con.cursor()
user_id = request.form['clientid']
pck_id = request.form['packageid']
package = db.execute("SELECT * FROM packages WHERE client_id = ?;", (user_id, ))
result = package.fetchall()
privatelessons = result[0][4] ##Without flask this run, with flask this throws an index error.
pop = privatelessons - 1
db.execute("UPDATE packages SET privatelesson = ? WHERE client_id = ? AND pck_id = ?;", (pop, user_id, pck_id, ))
con.commit()
【问题讨论】:
-
检查你是否使用了同一个数据库,有没有 Flask
-
clientid 和 packageid 的发布值是多少?它是否在烧瓶外工作,因为您将它们设置为 1 而不是“1”?
-
它与我在本地运行的数据库相同,只是测试所有内容。我刚刚添加了.. int_user = int(user_id), int_pck = int(pck_id) 这似乎使它起作用了。但这没有多大意义,它上面的另一个表单不需要我在表单输入上调用 int ,并且功能几乎不一样..有什么想法吗?此外,我在 /poplesson 末尾的 return 语句由于某种原因没有呈现模板。
标签: python flask sqlite jinja2