用Flask函数代替MySQL数据库中的数据

2024-06-16 12:05:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个装有WTForms的Flask应用程序,处理数据输入。有一个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


Tags: intestformadd应用程序formysqlconnection
1条回答
网友
1楼 · 发布于 2024-06-16 12:05:00

您的代码中有一个名为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']))

请注意,我们将execution语句中的erga更改为form.erga.data,这样我们就可以得到形式中SelectField的值。重要的是要知道form.erga.data将为您提供所选选项的键。在您的情况下,我们不需要担心这一点,因为您的选择选项的键和值是相同的。然而,在未来的情况下,关键可能会有所不同。因此,在这些情况下,要获得选择选项的实际值,您可能需要使用dict(form.erga.choices).get(form.erga.data)

相关问题 更多 >