2015-10-28 15 views
2

尝试为我的应用程序创建一个注册页面。我使用的Flask框架和MySQL db从pythonanywhere.com烧瓶,并非在字符串格式化过程中转换的所有参数

@app.route('/register/', methods=["GET","POST"]) 
def register_page(): 
try: 
    form = RegistrationForm(request.form) 



    if request.method == "POST" and form.validate(): 
     email = form.email.data 
     password = sha256_crypt.encrypt((str(form.password.data))) 
     c, conn = connection() 

     x = c.execute("SELECT * FROM users WHERE email = (%s)", 
         (email)) 

     if int(x) > 0: 
      flash("That email adress is already in use.") 
      return render_template('register.html', form=form) 

     else: 
      c.execute("INSERT INTO users (email, password) VALUES (%s, %s)", 
         (thwart(email),thwart(password))) 

      conn.commit() 
      flash("Thanks for registering!") 
      c.close() 
      conn.close() 
      gc.collect() 

      session['logged_in'] = True 
      session['email'] = email 

      return redirect(url_for('dashboard')) 

    return render_template("sign-up.html", form=form) 


except Exception as e: 
    return(str(e))} 

运行时出现错误:并非所有在字符串格式化过程中转换的参数。 如何解决它?可能是这个声明中的问题?

c.execute("INSERT INTO users (email, password) VALUES (%s, %s)", (thwart(email),thwart(password)))

+0

我正在使用MySQL – Vasile

+1

您是否100%确定错误在该行发生?我认为这个问题更可能出现在上面的x = c.execute()行,你应该把'(email)'' - 注意尾部的逗号 - 作为最后一个参数,而不是'(email)'没有尾随逗号。 –

+0

我将'(email)'改为'(email,)'并得到了相同的结果 – Vasile

回答

3

我先前的评论只是转换一个答案,因为它似乎是:-)

的问题是从不同的线路来正确的解决方案。你有这个:

 x = c.execute("SELECT * FROM users WHERE email = (%s)", 
         (email)) 

这不会做你可能会认为它做的事。将email置于括号中什么也不做,因此该行实际上等同于在字符列表中传递该变量中每个字符的每个字符。相反,如果你这样做:

 x = c.execute("SELECT * FROM users WHERE email = (%s)", 
         (email,)) 

...那么你就可以通过在包含一个项目,email元组,它应该更好地工作。

相关问题