Flask - 根据字符串检查数据库

时间:2014-01-16 02:47:58

标签: python sql flask

代码:

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已存在) 。')。

查询是否返回与用户名匹配的行数而不是用户名的值?或者逻辑是不正确的。

2 个答案:

答案 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()

不幸的是,您无法更改表以添加唯一索引或主键。但如果你还在设计中,这应该可行。