2015-10-28 13 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元組,它應該更好地工作。

相關問題