【问题标题】:Flask, not all arguments converted during string formattingFlask,并非所有参数都在字符串格式化期间转换
【发布时间】:2016-01-28 13:39:33
【问题描述】:

尝试为我的应用创建一个注册页面。我正在使用来自pythonanywhere.com 的 Flask 框架和 MySQL 数据库。

@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)))

【问题讨论】:

  • 您是否 100% 确定错误发生在该行?我认为问题更可能出在上面的 x = c.execute() 行,您应该将 (email,) - 注意尾随逗号 - 作为最后一个参数,而不是 (email) 没有尾随逗号。
  • 我将(email) 更改为(email,) 并得到相同的结果
  • 成功了!我只是没有重新启动服务器。谢谢!

标签: python mysql flask pythonanywhere


【解决方案1】:

只是将我之前的评论转换为答案,因为它似乎是正确的解决方案 :-)

问题来自不同的行。你有这个:

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

这并不像你想象的那样。将email 放在方括号中没有任何作用,因此该行实际上等同于在字符列表中传入该变量中的每个字符。如果你这样做:

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

...那么您将传入一个包含一项 email 的元组,它应该会更好地工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-22
    • 1970-01-01
    • 2013-03-07
    • 1970-01-01
    • 1970-01-01
    • 2020-08-23
    相关资源
    最近更新 更多