【问题标题】:Update sql database using variables from Python Flask HTML list使用 Python Flask HTML 列表中的变量更新 sql 数据库
【发布时间】:2019-02-28 20:28:36
【问题描述】:

我正在尝试创建一个网站表单(使用 Python Flask 和 WTForms 以及 pyodbc 进行数据库连接)。我有一个 sql server 数据库,它显示要在 html 中更新的记录。

我的目标是更新数据库中每条记录的“单价”和“折扣”。我创建的表单需要用户在每个字段中输入。因为该数据库数据显示在列表中,所以我不确定如何将数据匹配回数据库。

当我按原样提交表单时,只有第一条记录插入数据库和This is what the form looks in my testing environment(请原谅可怕的格式)。第一列是“单价”,第二列是“折扣”,插入数据库的唯一记录是第一列,元素和元素名称未正确映射。

有没有办法引用“elementdata”中的列? (例如:elementdata.UniqueKey)

如何在html中显示的数据与插入数据库的数据之间建立连接?

编辑:我在 youtube 上观看了 Corey Schafer 的一些视频,发现它们很有帮助,但它们并没有完全解决我的问题。(https://www.youtube.com/channel/UCCezIgC97PvUuR4_gbFUs5g)

我目前正朝着创建自己的列表然后在 HTML 中调用该列表的方向前进。所以不是

elementdata = cur.execute("SELECT UniqueKey, Element, ElementName, Quantity FROM FakePricingData WHERE ClientName=clientname").fetchall()

我试过了:

uniquekey = cur.execute("SELECT UniqueKey FROM FakePricingData WHERE ClientName=clientname").fetchall()

element = cur.execute("SELECT Element FROM FakePricingData WHERE ClientName=clientname").fetchall()

elementname = cur.execute("SELECT ElementName FROM FakePricingData WHERE ClientName=clientname").fetchall()

elementdata = [唯一键,元素,元素名称]

但是,当引用 elementdata[0] 时,除了获取唯一键之外,我还获取了整个第一行。

我怎样才能得到我正在寻找的东西?如果能得到任何帮助,我将不胜感激!

@app.route("/VendorPricing/Example", methods=['GET', 'POST'])
@login_required
def vendorpricing():
    clientname = "Example Credit Union"
    elementdata = cur.execute("SELECT UniqueKey, Element, ElementName, Quantity FROM FakePricingData WHERE ClientName=clientname").fetchall()
    form = VendorPricingForm()
    if form.validate_on_submit():
        for elementdata in elementdata:
            loggedinuserid = current_user.get_id()
            query = "INSERT INTO FakeQuoteData (UniqueKey, Element, ElementName, Quantity, UnitPrice, Discount, ClientName, SubmittedBy, LoggedInUserId) VALUES (?,?,?,?,?,?,?,?,?);"
            query_values = [form.uniquekey.data, form.element.Element, 'NULL', '0', form.unitprice.data, form.discount.data, clientname, form.submittedby.data, loggedinuserid]
            cur.execute(query, query_values)
            cur.commit()
            flash('Your pricing has been submitted!', 'success')
            return redirect(url_for('welcome'))
    return render_template('vendorpricing.html', form=form, clientname=clientname, elementdata=elementdata)
    
    
    
    ------ form ------
    
class VendorPricingForm(FlaskForm):
      unitprice = IntegerField('Unit Price', validators=[DataRequired()])
      discount = IntegerField('Discount')
      uniquekey = StringField('Unique Key')
      submittedby = StringField('Submitted By', validators=[DataRequired()])
      submit = SubmitField('Submit')
{% extends "layout.html" %}
{% block content %}
<h2>{{ title }}</h2>

<body>
    <form method="POST" action="">
        {{ form.hidden_tag() }}
        <div class="vendor-form-group">
            {{ form.unitprice.label(class="form-control-label") }}
            {{ form.discount.label(class="form-control-label") }}
            {% for elementdata in elementdata %}
            <p>
                {{ elementdata }}
                {{ form.unitprice }}
                {{ form.discount }}
            </p>
            {% endfor %}
            {{ form.submittedby.label(class="form-control-label") }}
            <p>{{ form.submittedby }}</p>
            {{ form.submit }}
        </div>
    </form>
</body>

{% endblock content %}

【问题讨论】:

    标签: python flask pyodbc flask-wtforms wtforms


    【解决方案1】:

    你可以试试 InputRequired() 而不是 DataRequired()

    【讨论】:

    • 添加有关此更改如何影响查询的说明将非常有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-06
    • 1970-01-01
    • 1970-01-01
    • 2018-04-22
    • 1970-01-01
    • 1970-01-01
    • 2017-03-07
    相关资源
    最近更新 更多