代码:
userExists = g.db.execute('SELECT username FROM users WHERE username = ?', [request.form['usr']])
if request.form['usr'] == userExists:
error = 'Username already exists.'
希望代码不言自明。如果没有,我希望注册用户根据数据库检查他的名字。用户名必须是唯一的,因此如果输入到表单中的信息(request.form ['usr'])等于保存到userExists变量的SQL查询的结果,则应抛出错误(error ='Username已存在) 。')。
查询是否返回与用户名匹配的行数而不是用户名的值?或者逻辑是不正确的。
答案 0 :(得分:1)
您可以在创建表时将username
定义为唯一键来执行此操作。然后将INSERT
放入try ... catch ...
块。如果用户名存在,则会抛出异常。
答案 1 :(得分:0)
假设您正在使用 g.db.execute 所指示的sqlite3,并且您在用户名列上保留了一个唯一索引,因为在创建它时,您可以执行以下操作:< / p>
username = request.form['usr']
print "Attempting to insert username = %s" %username
try:
g.db.execute("insert into users(username) values('%s')" %username)
except sqlite3.IntegrityError:
print 'Username %s is already in database' %username
g.db.rollback()
except:
g.db.rollback()
#Handle other errors as desired.
finally:
g.db.commit()
g.db.close()
不幸的是,您无法更改表以添加唯一索引或主键。但如果你还在设计中,这应该可行。