Python 如果Mysql数据库中已经存在用户名,如何显示消息?
有人能帮我吗?我是Python烧瓶的新手。我需要显示一条消息,如果“用户名”数据已经存在,以避免重复条目。我使用的是Mysql,我的表名是“users” 例如,如果我试图将testuser1保存为已经存在的用户名,我会得到 MySQLdb._exceptions.IntegrityError:(1062,“重复输入'testuser1'作为密钥'username')我试图从类似的请求中找到一些解决方案,但对我无效。如果您能帮助我,我将非常感激 代码如下:Python 如果Mysql数据库中已经存在用户名,如何显示消息?,python,html,mysql,flask,Python,Html,Mysql,Flask,有人能帮我吗?我是Python烧瓶的新手。我需要显示一条消息,如果“用户名”数据已经存在,以避免重复条目。我使用的是Mysql,我的表名是“users” 例如,如果我试图将testuser1保存为已经存在的用户名,我会得到 MySQLdb._exceptions.IntegrityError:(1062,“重复输入'testuser1'作为密钥'username')我试图从类似的请求中找到一些解决方案,但对我无效。如果您能帮助我,我将非常感激 代码如下: @app.route('/registe
@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岁,大约一年半前就开始了)这意味着你的思维比我的思维更新鲜、更快。(蝙蝠将疾病传给人类的几率很低,但看看我们的情况)。你的答案已经被“接受”,所以我认为你不需要“修正”它。但总的来说,我认为处理这类事情的方法是成熟的,而且(据我所知)相当稳健。