Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Flask/Python索引超出范围_Python_Flask_Sqlite_Jinja2 - Fatal编程技术网

使用Flask/Python索引超出范围

使用Flask/Python索引超出范围,python,flask,sqlite,jinja2,Python,Flask,Sqlite,Jinja2,我正在开发一个web应用程序,遇到了以下代码的一些问题。我有一个需要更新值的数据库。当我尝试更新这个值时,我得到了一个索引超出范围的错误,但是当我仅使用python运行代码时,没有使用它运行并按预期执行的web部件。。当我用flask和HTML表单部分地尝试它时,我不知道发生了什么变化。这是我更新数据库的代码 编辑::经过更多的测试,似乎表单将我需要的数据推回到/poplesson时出现了一些问题。如果更改这些行 user_id = request.form['clientid'] pck_id

我正在开发一个web应用程序,遇到了以下代码的一些问题。我有一个需要更新值的数据库。当我尝试更新这个值时,我得到了一个索引超出范围的错误,但是当我仅使用python运行代码时,没有使用它运行并按预期执行的web部件。。当我用flask和HTML表单部分地尝试它时,我不知道发生了什么变化。这是我更新数据库的代码

编辑::经过更多的测试,似乎表单将我需要的数据推回到/poplesson时出现了一些问题。如果更改这些行

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()