首页 > 解决方案 > 从 MySQL 编辑数据填充 Flask WTF 表单并更新回 MySQL

问题描述

我的目标:

在编辑 BTN 上 - 表单预先填充了来自 db 的数据,允许我编辑一些字段,一旦进行更改,在编辑/提交时,btn 将使用新的更改更新数据库数据。

我有 Flask 应用程序,它呈现一个预先填充了 MySQL 数据的表单。(这有效)

@app.route('/get_and_edit_pipeline/<string:id>', methods=['GET', 'POST'])
@is_logged_in
def get_and_edit_pipeline(id):
    if request.method == 'GET':
        cur = mysql.connection.cursor()
        result = cur.execute("""SELECT * FROM pipeline where pipeline_name='{}'""".format(id))
        if result > 0:
            res = cur.fetchall()
            for i in range(len(res)):
                pipeline_name = res[i]['pipeline_name']
                pipeline_status_nm = res[i]['pipeline_status_nm']
                pipeline_type = res[i]['pipeline_type']
            cur.close()
            form = AddPipeline(pipeline_name=pipeline_name,
                                pipeline_status_nm=pipeline_status_nm,
                                pipeline_type=pipeline_type)

            return render_template('add_pipeline.html', form=form)

    return render_template('pipeline.html')

如何更新/更改(归档)并提交回我的数据库

我正在尝试这个:

@app.route('/get_and_edit_pipeline/<string:id>', methods=['GET', 'POST'])
@is_logged_in
def get_and_edit_pipeline(id):
    if request.method == 'GET':
        cur = mysql.connection.cursor()
        result = cur.execute("""SELECT * FROM pipeline where pipeline_name='{}'""".format(id))
        if result > 0:
            res = cur.fetchall()
            for i in range(len(res)):
                pipeline_name = res[i]['pipeline_name']
                pipeline_status_nm = res[i]['pipeline_status_nm']
                pipeline_type = res[i]['pipeline_type']
            cur.close()
            form = AddPipeline(pipeline_name=pipeline_name,
                                pipeline_status_nm=pipeline_status_nm,
                                pipeline_type=pipeline_type)

            if form.validate_on_submit():
                cur = mysql.connection.cursor()
                form.pipeline_name = form.pipeline_name.data
                form.pipeline_status_nm = form.pipeline_status_nm.data
                form.pipeline_type = form.pipeline_type.data
                cur.execute("""UPDATE pipeline SET pipeline_status_nm='{}' WHERE pipeline_name='{}'""".format(pipeline_status_nm, pipeline_name))
                cur.session.commit()
                return render_template('add_pipeline.html', form=form)
            return render_template('add_pipeline.html', form=form)

    return render_template('pipeline.html')

这是我的表单html

{% extends 'layout.html' %}

{% block body %}
  <h1>Add Pipeline</h1>
  {% from "includes/_formhelpers.html" import render_field %}
  <form action="" method="post">
    <div class="form-group">
      {{render_field(form.pipeline_name, class_="form-control")}}
    </div>
    <div class="form-group">
      {{render_field(form.pipeline_status_nm, class_="form-control")}}
    </div>
    <div class="form-group">
      {{render_field(form.pipeline_type, class_="form-control")}}
    </div>
    <p>
      <input type="submit" name='submit' class="btn btn-primary" value="Add">
      <input type="submit" name='submit' class="btn btn-basic" value="Cancel">
    </p>
  </form>

{% endblock %}

我对 Flask WTF 很陌生-所以请客气:)

标签: mysqlflaskflask-wtforms

解决方案


推荐阅读