2016-10-02 51 views
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() 
+1

檢查您是否使用帶有和不帶Flask的相同數據庫 –

+0

clientid和packageid的公佈值是什麼?它是否在燒瓶外工作,因爲你將它們設置爲1而不是「1」? –

+0

這是與我在本地運行測試所有內容相同的數據庫。我剛剛添加.. int_user = int(user_id),int_pck = int(pck_id),似乎已經使它的工作。但它沒有多大意義,其他形式正確的上面它並不需要我在表單輸入中調用int,並且函數更不相同。對於爲什麼會有任何想法?另外,我在/ poplesson結尾的返回聲明並不是出於某種原因呈現模板。 –

回答

0

我能想到的兩個可能的原因:您正在使用帶/不帶瓶

  1. 數據庫配置不同
  2. 檢查兩個密碼你user_idtype和價值。它可能不同。