Flask - функция вместо данных в базе данных MySQL - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть приложение Flask с WTForms, обрабатывающее ввод данных. Есть SelectField, который правильно показывает данные, которые у меня есть в таблице erga. Однако при использовании формы вместо добавления правильных значений в столбец ergo в таблицу базы данных приложение добавляет функции! Как это можно исправить?

Моя форма:

class TestForm(Form):
    testpedio = StringField('Testpedio', [validators.Length(min=1, max=200)])
    erga = SelectField('ergo',  choices=[])

Мой код:

@app.route('/add_test', methods=['GET', 'POST'])
@is_logged_in
def add_test():
    cur = mysql.connection.cursor()
    cur.execute("SELECT ergo FROM erga")
    list1 = list(cur.fetchall())
    def arx():
        for i in list1:
            for k in i:
                j=i[k]
                list2.append(j)

    list2=[]
    arx()
    print(list2)

    form = TestForm(request.form)
    form.erga.choices= [(i,i) for i in list2]
    print(form.erga.choices)

    if request.method == 'POST' and form.validate():
        testpedio = form.testpedio.data

        # Create Cursor
        cur = mysql.connection.cursor()

        # Execute
        cur.execute("INSERT INTO test(testpedio,ergo,author) VALUES(%s,%s, %s)",(testpedio,erga,session['username']))

        # Commit to DB
        mysql.connection.commit()

        #Close connection
        cur.close()

        flash('Test Created', 'success')

        return redirect(url_for('dashboard'))

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

Страница с SelectField, которая показывает, что все работает как задумано: Form

Стол MySQL Table

1 Ответ

0 голосов
/ 19 ноября 2018

У вас есть функция, которая называется erga где-то в вашем коде. Вот почему вы вставляете функции вместо значений. Чтобы исправить свой код, вам нужно изменить оператор выполнения с:

cur.execute("INSERT INTO test(testpedio,ergo,author) VALUES(%s,%s, %s)",(testpedio,erga,session['username']))

до:

cur.execute("INSERT INTO test(testpedio,ergo,author) VALUES(%s,%s, %s)",(testpedio,form.erga.data,session['username']))

Обратите внимание, что мы изменили erga в операторе выполнения на form.erga.data, так что мы получим значение SelectField в вашей форме. Важно знать, что form.erga.data даст вам ключ выбора, который вы выбрали. В вашем случае нам не нужно беспокоиться об этом, поскольку ключ и значение ваших вариантов выбора одинаковы. Однако в будущих случаях ключ может отличаться. Таким образом, в этих случаях, чтобы получить действительные значения опций выбора, вы можете использовать dict(form.erga.choices).get(form.erga.data).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...