Flask, not all arguments converted during string formatting

馋奶兔 提交于 2019-12-07 13:51:28

问题


Try to create a register page for my app. I am using Flask framework and MySQL db from 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))}

On running I get the Error:not all arguments converted during string formatting. How to fix it? May be the problem in this statement?

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


回答1:


Just converting my earlier comment to an answer, as it seemed to be the right solution :-)

The problem is coming from a different line. You have this:

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

This doesn't do what you might think it does. Putting email in brackets does nothing, so the line is actually equivalent to passing in each character of whatever's in that variable in a list of characters. If instead you do this:

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

...then you'll be passing in a tuple containing one item, email, and it should work better.



来源:https://stackoverflow.com/questions/33396856/flask-not-all-arguments-converted-during-string-formatting

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!