2017-01-30 66 views
1

enter image description here Я пытаюсь работать над регистрацией с использованием форм WTF, и я столкнулся с синтаксической ошибкой sql, когда я пытаюсь вводить данные через выполнение фляг. Но я могу вставлять данные, используя обычный sql-запрос через командную строку mysql.Ошибка 1064 sql синтаксическая ошибка

from wtforms import Form, BooleanField, StringField, PasswordField, validators 
from MySQLdb import escape_string as thwart 

class RegistrationForm(Form): 
    username = StringField('Username', [validators.Length(min=4, max=25)]) 
    email = StringField('Email Address', [validators.Length(min=6, max=35)]) 
    password = PasswordField('New Password', [validators.DataRequired(), validators.EqualTo('confirm', message='Passwords must match')]) 
    confirm = PasswordField('Repeat Password') 
    accept_tos = BooleanField('I accept the TOS', [validators.DataRequired()]) 
# for registering the user 
@app.route('/register/', methods = ['GET', 'POST']) 
def register_page(): 
    try: 
     form = RegistrationForm(request.form) 
     if request.method == 'POST' and form.validate(): 
      username = form.username.data 
      email = form.email.data 
      password = sha256_crypt.encrypt(str(form.password.data)) 

      c, conn = connection() 
      x = c.execute("SELECT * FROM users WHERE username = '(%s)'" %(thwart(username),)) 
      #x = c.fetchone() 
      if int(x) > 0: 
       flash ("that username already taken, please take another") 
       return render_template("register.html", form =form) 
      else: 
       c.execute("INSERT INTO users (username, password, email, tracking) VALUES (%s, %s, %s, %s)" %(thwart(username), thwart(password), thwart(email), thwart('/home/'))) 
       c.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 render_template("register.html", error = e, form = form) 

Ошибка может быть найдена ниже После ввода пароля и сопоставления его с подтверждения и представить его. Я получаю сообщение об ошибке. Может кто-нибудь, пожалуйста, помогите мне в этом.

ответ

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

аналогично

query2 = "INSERT INTO users (username, password, email, tracking) VALUES (%s, %s, %s, %s)" 

c.execute(query2, (thwart(username), thwart(password), thwart(email), thwart('/home/')) 

работал!

1

Ваши заявления SQLite выглядят неправильно.

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

одиночные кавычки которые уже обработаны, насколько я знаю, но в любом случае вы можете просто использовать подготовленное заявление:

x = c.execute("SELECT * FROM users WHERE username = ?", (thwart(username))) 

То же самое справедливо и в отношении вашего INSERT заявления:

c.execute("INSERT INTO users (username, password, email, tracking) VALUES (?, ?, ?, ?)" (thwart(username), thwart(password), thwart(email), thwart('/home/'))) 
      c. 
+0

Это сработало. Но после получения этого кода я получаю новую ошибку, называемую объектом «str». @Tim Biegeleisen – Bhargav

+0

Можете ли вы дать мне номер строки, по крайней мере, где происходит ошибка? –

+0

'password = sha256_crypt.encrypt (str (form.password.data))' ... вы уверены, что у вас нет другой проблемы с вашим кодом? –

 Смежные вопросы

  • Нет связанных вопросов^_^