2016-10-02 54 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和价值。它可能不同。