Получение значения ключа из WTForms SelectField с помощью Flask

0

У меня проблема с WTForms в Flask, я хочу создать функцию 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 строки 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)
Теги:
python-3.x
flask
wtforms

1 ответ

1
Лучший ответ

Имя таблицы заменяется как строка с кавычками, и запрос выполняется как таковой.

Вы можете создать свой запрос с именем таблицы перед привязкой параметризованных значений.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню