使用Flask/Python索引超出范围
我正在开发一个web应用程序,遇到了以下代码的一些问题。我有一个需要更新值的数据库。当我尝试更新这个值时,我得到了一个索引超出范围的错误,但是当我仅使用python运行代码时,没有使用它运行并按预期执行的web部件。。当我用flask和HTML表单部分地尝试它时,我不知道发生了什么变化。这是我更新数据库的代码 编辑::经过更多的测试,似乎表单将我需要的数据推回到/poplesson时出现了一些问题。如果更改这些行使用Flask/Python索引超出范围,python,flask,sqlite,jinja2,Python,Flask,Sqlite,Jinja2,我正在开发一个web应用程序,遇到了以下代码的一些问题。我有一个需要更新值的数据库。当我尝试更新这个值时,我得到了一个索引超出范围的错误,但是当我仅使用python运行代码时,没有使用它运行并按预期执行的web部件。。当我用flask和HTML表单部分地尝试它时,我不知道发生了什么变化。这是我更新数据库的代码 编辑::经过更多的测试,似乎表单将我需要的数据推回到/poplesson时出现了一些问题。如果更改这些行 user_id = request.form['clientid'] pck_id
user_id = request.form['clientid']
pck_id = request.form['packageid']
到
它将按计划工作,但这不是我需要的,因为我需要从数据库中提取这些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>
我可以想到两个可能的原因:
类型
和用户id
的值。可能会有所不同检查您是否使用带和不带烧瓶的相同数据库clientid和packageid的发布值是多少?它是否在flask之外工作,因为您将它们设置为1而不是“1”?它与我在本地运行的DB相同,只是测试所有内容。我刚才又加了一句。。int_user=int(user_id),int_pck=int(pck_id),这似乎使它起到了作用。但是这没有多大意义,它上面的另一个表单不需要我在表单输入上调用int,函数也大同小异。。有什么想法吗?此外,由于某些原因,/poplesson末尾的return语句没有呈现模板。
<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>
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()