使用Flask从WTForms SelectField检索键值

时间:2018-01-19 12:01:46

标签: mysql python-3.x flask wtforms

我在Flask中遇到WTForms的问题,我想创建一个add_menu函数,它将菜单添加到数据库中。用户可以相应地从SelectField“Appetizer”,“Main Dish”或“Drinks”中进行选择。因此,每当用户从SelectField中选择值时,它都会添加到数据库中的相应表中。 (我使用MySQL)。出于某种原因,当我使用menu_type = form.menu_type.data时,它会给我以下错误

  

mysql_exceptions.ProgrammingError:(1064,“您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以便在''main_dishes'附近使用正确的语法(名称,成分,价格)VALUES( 'Salmon','

duude,frv

','35')'在第1行“)   这需要正确的价值,但我在main_dishes字符串前面有这个尴尬的''标志   我的代码如下所示:

class MenuForm(Form):
    menu_type = SelectField('Menu Type', [validators.DataRequired()], choices=[('appetizers','Appetizer'),('main_dishes','Main Dish'),('desserts','Dessert'),('drinks','Drinks')], coerce=str)
    name = StringField('Name', [validators.Length(min=1, max=2000)])
    ingredients = TextAreaField('Ingredients', [validators.Length(min=10)])
    price = DecimalField('Price (Manat)', [validators.DataRequired()])

@app.route('/add_menu', methods=['GET','POST'])
@is_logged_in
def add_menu():
    form = MenuForm(request.form)
    if request.method == 'POST' and form.validate():
        menu_type = form.menu_type.data # <---Here is the problem
        name = form.name.data
        ingredients = form.ingredients.data
        price = form.price.data

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

        #execute
        cur.execute("INSERT INTO %s(name,ingredients,price) VALUES(%s, %s, %s)", (menu_type,name,ingredients,price))

        #Commit to DB
        mysql.connection.commit()

        #CLose connection
        cur.close()

        flash('Menu is Added', 'success')

    return redirect(url_for('dashboard'))

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

1 个答案:

答案 0 :(得分:1)

将表名替换为带引号的字符串,并将查询执行。

您可能希望在绑定参数化值之前使用表名构建查询。

query = "INSERT INTO {}(name,ingredients,price) VALUES(%s, %s, %s)".format(menu_type)
cur.execute(query, (name,ingredients,price))