У меня проблема с 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)
Имя таблицы заменяется как строка с кавычками, и запрос выполняется как таковой.
Вы можете создать свой запрос с именем таблицы перед привязкой параметризованных значений.
query = "INSERT INTO {}(name,ingredients,price) VALUES(%s, %s, %s)".format(menu_type)
cur.execute(query, (name,ingredients,price))