Python 使用Flask将表单数据发送到数据库

Python 使用Flask将表单数据发送到数据库,python,flask,flask-sqlalchemy,flask-wtforms,Python,Flask,Flask Sqlalchemy,Flask Wtforms,我创建了一个带有文本字段和按钮的简单网页。我希望我的应用程序在单击按钮时使用文本字段的内容更新数据库中的记录。看起来很简单,但我不知道我遗漏了什么。以下是我迄今为止的代码: app.py样本 audit.html示例 我不确定我是否错过了一个我在flask_wtf中玩过的基本概念,并且没有取得任何进展,或者距离实现这一点还有一两步。为文本输入设置名称属性,以便它与提交的表单一起发送 <input name="description" type="text" id="desc" value=

我创建了一个带有文本字段和按钮的简单网页。我希望我的应用程序在单击按钮时使用文本字段的内容更新数据库中的记录。看起来很简单,但我不知道我遗漏了什么。以下是我迄今为止的代码:

app.py样本

audit.html示例


我不确定我是否错过了一个我在flask_wtf中玩过的基本概念,并且没有取得任何进展,或者距离实现这一点还有一两步。

为文本输入设置名称属性,以便它与提交的表单一起发送

<input name="description" type="text" id="desc" value="{{ row[3] }}" size="140">

您的render_模板应获得一个表单参数:

返回呈现模板'clicked.html',form=form

您提供的代码中也不清楚在python中处理表单的位置以及变量行的来源。

找到了答案:

app.py样本

audit.html示例


答案是正确的SQL Alchemy命令的组合,并确保我正在通过audit.html中的两个输入标记将数据发送到update_audit函数。

感谢您的回答,尽管我得到了以下回溯:AttributeError:'Request'对象也没有属性'POST',我需要将测试名称传递到update_audit,以便数据库知道我要更新哪一行。这应该发生在audit.html中,第[2]行包含测试名称。它应该是request.form而不是request.post,它将数据发送到clicked.html视图,但数据库仍然没有更新。不过差一点!是的,您需要提交对db的更改。行是数据库中iter数据的当前索引。当我加载audit.html时,我传递一个查询的结果,该查询要求表sample中的所有数据。
<form action="{{ url_for('update_audit') }}" method="post">
    <td>{{ row[2] }}</td>
    <td>
        <input type="text" id="desc" value="{{ row[3] }}" size="140">
        <input type="hidden" name="update_audit" value="{{ row[2] }}, desc"/>
        <input type="submit" class="btn btn-success" value="Update"/>
    </td>
</form>
<!DOCTYPE html>
{% extends "layout.html" %}
{% block content %}
<body>
{{ form.description }}<br />
</body>
{% endblock %}
id | tool name | test name | description
========================================
1  | "tool1"   | "test1"   | "update me!"
<input name="description" type="text" id="desc" value="{{ row[3] }}" size="140">
@app.route('/update-audit/', methods=['POST'])
def update_audit():
    description = request.form.get('description')
    test_name = request.form.get('update_audit')
    cur = connect_db()
    with cur:
        cur.execute(
            'UPDATE audit SET description = ? '
            'WHERE test_name = ?;', (description, test_name,))

    # commit changes to the database
    return render_template('clicked.html')
@app.route('/update-audit/', methods=['POST'])
def update_audit():
    description = request.form.get('description')
    test_name = request.form.get('test_name')

    sql = 'UPDATE audit SET description=? WHERE test_name=?'
    conn = sqlite3.connect(DATABASE)
    cur = conn.cursor()
    cur.execute(sql, (description, test_name))
    conn.commit()
    conn.close()

    return render_template('clicked.html', data=(test_name, description))
<form action="{{ url_for('update_audit') }}" method="POST">
    <td>
        <input type="hidden" name="test_name" value="{{ row[2] }}">{{ row[2] }}</input>
    </td>
    <td>
        <input type="text" name="description" id="desc" value="{{ row[3] }}" size="100" maxlength="140"/>
        <input type="submit" class="btn btn-success" value="Update"/>
    </td>
</form>
</tr>