Python 如果Mysql数据库中已经存在用户名,如何显示消息?

Python 如果Mysql数据库中已经存在用户名,如何显示消息?,python,html,mysql,flask,Python,Html,Mysql,Flask,有人能帮我吗?我是Python烧瓶的新手。我需要显示一条消息,如果“用户名”数据已经存在,以避免重复条目。我使用的是Mysql,我的表名是“users” 例如,如果我试图将testuser1保存为已经存在的用户名,我会得到 MySQLdb._exceptions.IntegrityError:(1062,“重复输入'testuser1'作为密钥'username')我试图从类似的请求中找到一些解决方案,但对我无效。如果您能帮助我,我将非常感激 代码如下: @app.route('/registe

有人能帮我吗?我是Python烧瓶的新手。我需要显示一条消息,如果“用户名”数据已经存在,以避免重复条目。我使用的是Mysql,我的表名是“users”

例如,如果我试图将testuser1保存为已经存在的用户名,我会得到 MySQLdb._exceptions.IntegrityError:(1062,“重复输入'testuser1'作为密钥'username')我试图从类似的请求中找到一些解决方案,但对我无效。如果您能帮助我,我将非常感激

代码如下:

@app.route('/register', methods=['GET', 'POST'])
def register():
    form = RegisterForm(request.form)
    if request.method == 'POST' and form.validate():
        name = form.name.data
        email = form.email.data
        username = form.username.data
        password = sha256_crypt.encrypt(str(form.password.data))

        cur = mysql.connection.cursor()
        cur.execute("INSERT INTO users(name, email, username, password) VALUES(%s, %s, %s, %s)", (name, email, username, password))
        mysql.connection.commit()
        # Close connection
        cur.close()

        flash('You are,registered!!', 'success')
        return redirect(url_for('login'))
    return render_template('register.html', form=form)
尝试使用以下方法:

x = cur.execute("SELECT * FROM users WHERE name = (%s)",
                          (thwart(name)))
if int(x) > 0:
   flash("That name is already taken, please choose another")
   return render_template('register.html', form=form)
else: 
   cur.execute("INSERT INTO users(name, email, username, password) VALUES(%s, %s, %s, %s)", (name, email, username, password))
基本上,如果用户名存在,
int(x)
将为1,它将显示一条消息,而不会保存尝试。如果它不存在,它只会保存它。你也应该在电子邮件中这样做,这样用户就不能有相同的电子邮件

完整代码:

@app.route('/register', methods=['GET', 'POST'])
def register():
    form = RegisterForm(request.form)
    if request.method == 'POST' and form.validate():
        name = form.name.data
        email = form.email.data
        username = form.username.data
        password = sha256_crypt.encrypt(str(form.password.data))
        cur = mysql.connection.cursor()
        x = cur.execute("SELECT * FROM users WHERE name = (%s)",
                          (thwart(name)))
        if int(x) > 0:
           flash("That name is already taken, please choose another")
           return render_template('register.html', form=form)
        else: 
           cur.execute("INSERT INTO users(name, email, username, password) VALUES(%s, %s, %s, %s)", (name, email, username, password))
           mysql.connection.commit()
           cur.close()
           flash('You are,registered!!', 'success')
           return redirect(url_for('login'))
    return render_template('register.html', form=form)

(请告诉我,如果这不起作用,我将尽力帮助您解决问题。另外,如果有人发现任何错误,请告诉我,我也在学习Flask)

更改/替换mysql表“users”中的唯一id,以便您可以看到重复的用户名。

如果用户b在用户a“检查”时插入@草莓,我认为如果用户b插入,而用户a正在检查,那么它要么让用户a继续,要么显示错误。即使用户a被保存,我想它以后也会遇到完整性错误。我应该在代码中修复这个问题吗?不过我不认为会发生这种情况,我认为可能性很低。我认为逻辑是有缺陷的(除非与交易有关)@草莓,怎么会这样?我怎样才能解决这个问题?(我在编程方面不是很有经验,我才13岁,大约一年半前就开始了)这意味着你的思维比我的思维更新鲜、更快。(蝙蝠将疾病传给人类的几率很低,但看看我们的情况)。你的答案已经被“接受”,所以我认为你不需要“修正”它。但总的来说,我认为处理这类事情的方法是成熟的,而且(据我所知)相当稳健。