2016-04-03 4 views
0

私はFlask、MySQL、およびHTMLフォームを使用してユーザー登録ページを作成しようとしています。フォームからデータベースにデータを投稿しようとすると、このエラーが発生します。私はSQLで間違っている可能性がある誰にも見えますか?INSERTクエリをPOSTしようとすると、Webアプリケーションで1064(42000)エラーが発生するのはなぜですか?

受け取った完全なエラーは次のとおりです。

1064(42000):あなたは、あなたのSQL構文でエラーが発生しています。 「%s」の行で、近く使用する権利構文についてはMySQLサーバのバージョンに対応するマニュアルを確認してください1つの

私の接続機能は次のとおりです。

import mysql.connector 
from flask import * 

def connection(): 
    conn = mysql.connector.connect(host="localhost", db="user_login",user="root", 
           password="password") 
    c = conn.cursor() 
    return c, conn 

これはのinitの.pyにインポートされますファイルおよび下記呼ば:

class RegistrationForm(Form): 
    firstName = StringField('First Name', [validators.Length(min = 3, max = 25)]) 
    lastName = StringField('Surname', [validators.Length(min = 3, max = 25)]) 
    username = StringField('Username', [validators.Length(min = 4, max = 25)]) 
    email = StringField('Email Address', [validators.Length(min = 6, max = 50)]) 
    password = PasswordField('Password', [validators.required(), 
             validators.EqualTo('confirm', message = 'Passwords must match')]) 
    confirm = PasswordField('Repeat Password') 


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

     if request.method == "POST" and form.validate(): 
      firstName = form.firstName.data 
      lastName = form.lastName.data 
      username = form.username.data 
      email = form.email.data 
      password = form.password.data 
      is_admin = 0 
      c, conn = connection() 


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

      if int(x) > 0: 
       flash("That username is already taken, please choose another") 
       return render_template('register.html', form = form) 
      else: 
       c.execute(""" 
         INSERT INTO users (firstName, lastName, username, email, password, is_admin) 
         VALUES (%s, %s, %s, %s, %s, %s) 
         """,(firstName, lastName, username, email, password, is_admin)) 
       conn.commit() 
       flash("Thanks for registering!") 
       c.close() 
       conn.close() 
       gc.collect() 
       session['logged_in'] = True 
       session['username'] = username 
       return redirect(url_for('dashboard')) 

     return render_template('register.html', form = form) 

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

答えて

0

私はあなたの問題がSELECT、ないINSERTだと思います。パラメータとして(username)を渡しています。これはではなく、タプルです。末尾のカンマを使用する必要があります。

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

ありがとうございます!私はこれを変更し、 "int()引数は文字列でも数値でもなく、 'NoneType'でなければならないというエラーを受け取るようになりました。 xはリストを返すためだと思います。私はこれを編集して "if len(x)> 0:"と言い、データベースに投稿しています。 もう一度ありがとうございます。 – sh7289

関連する問題