2
我正在研究一個Web應用程序,並遇到以下代碼遇到的一些問題。我有一個數據庫,我需要更新一個值。當我嘗試更新值時,我得到一個索引超出範圍錯誤,但是當我用python運行代碼時不使用web部件,它運行並按預期執行。我無法弄清楚當我嘗試它時會發生什麼變化部分使用燒瓶和HTML表單。這裏是我的代碼來更新數據庫;使用Flask/Python指數超出範圍
編輯::更多的測試後,似乎有一些問題與形式推送數據我需要回到/ poplesson。如果改變這些線路;
user_id = request.form['clientid']
pck_id = request.form['packageid']
到
user_id = 1
pck_id = 1
它將按計劃工作,但是這不是我所需要的,因爲我需要這些ID的從DB拉出。
@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>
如果我這樣做只是這部分的蟒蛇,它運行正常,並用數據庫查看我可以看到數據庫已更新。有什麼想法嗎?
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結尾的返回聲明並不是出於某種原因呈現模板。 –