【发布时间】: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