这个问题在这里已经有答案了:
python sqlite3参数化drop表(2个答案)
两年前关门了。
我对flask中的wtforms有问题,我想创建一个add\u menu函数,将菜单添加到数据库中。用户可以从selectfield中相应地选择“开胃菜”、“主菜”或“饮料”。因此,每当用户从selectfield中选择值时,它就会添加到数据库中相应的表中(我使用mysql)。因为某种原因当我使用 menu_type = form.menu_type.data
它给了我以下错误
mysql\u exceptions.programmingerror:(1064,“您的sql语法有错误;查看与mysql服务器版本相对应的手册,了解在“main_disks”(名称、配料、价格)值(“salmon”和“salmon”附近使用的正确语法
杜德,法国
“,”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条答案
按热度按时间ztigrdn81#
表名被替换为一个带引号的字符串,查询也被这样执行。
在绑定参数化值之前,可能需要使用表名构建查询。