Обновите базу данных sql, используя переменные из списка HTML Python Flask - PullRequest
0 голосов
/ 28 февраля 2019

Я пытаюсь создать форму для веб-сайта (используя Python Flask, WTForms и pyodbc для подключения к базе данных).У меня есть база данных сервера SQL, которая отображает записи для обновления в HTML.

Моя цель - обновить «Цена за единицу» и «Скидка» для каждой записи в базе данных.Форма, которую я создал, требует ввода от пользователя в каждое из этих полей.Поскольку эти данные базы данных отображаются в списке, я не уверен, как сопоставить данные обратно в базу данных.

Когда я отправляю форму как есть, в базу данных вставляется только первая запись и Вот как выглядит форма в моей тестовой среде (пожалуйста, простите за ужасное форматирование).Первый столбец предназначен для «цены за единицу», а второй - для «скидки», единственная запись, вставленная в базу данных, является первой, и элемент и имя элемента не отображаются должным образом.

Есть ли способ ссылки на столбцы в "elementdata"?(ex: elementdata.UniqueKey)

Как я могу создать связь между данными, отображаемыми в html, и данными, вставленными в базу данных?

РЕДАКТИРОВАТЬ: Я посмотрел несколько видео Кори Шаферана YouTube и нашел их полезными, но они не совсем решили мою проблему. (https://www.youtube.com/channel/UCCezIgC97PvUuR4_gbFUs5g)

В настоящее время я направляюсь в направлении создания своего собственного списка, а затем вызываю этот список в HTML. Поэтому вместо этого

elementdata = cur.execute ("ВЫБЕРИТЕ UniqueKey, Элемент, ЭлементName, Количество ОТ FakePricingData WHERE ClientName = имя клиента"). fetchall ()

Я пытался:

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

element = cur.execute ("SELECT Элемент ИЗ FakePricingData WHERE ClientName = clientname"). fetchall ()

elementname = cur.execute ("SELECT ElementName ОТ FakePricingData WHERE ClientName = clientname"). Fetchall ()

elementdata = [uniquekey, element, elementname]

Однако, при ссылке на 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 %}
...