Python 用户名:cs50财务

Python 用户名:cs50财务,python,cs50,Python,Cs50,当我输入一个已使用的用户名时,我希望看到“已使用的用户名”错误。相反,我在终端中得到一个500内部服务器错误和一个RuntimeError:UNIQUE constraint failed:users.username。请帮忙 result = db.execute("INSERT INTO users (username, hash) VALUES(:username, :password)",username=request.form.get("username

当我输入一个已使用的用户名时,我希望看到“已使用的用户名”错误。相反,我在终端中得到一个500内部服务器错误和一个
RuntimeError:UNIQUE constraint failed:users.username
。请帮忙

result = db.execute("INSERT INTO users (username, hash) VALUES(:username, :password)",username=request.form.get("username"),password=generate_password_hash(request.form.get("password")))
#Username uniqueness
if not result:
    return apology("The username is already taken", 400)`

这是sqlite的可预测和预期结果。
执行
失败,因为它无法根据定义插入重复的用户名。(查看用户表架构以记住原因)。怎么办?两种可能的选择:

  • 查询(使用select)users表以查看
    username
    是否已存在。根据结果,程序应该尝试插入,或者不尝试
  • 阅读并实现INSERT查询中的一个子句
    • 我也有同样的问题。 我用try:except:like解决了这个问题:

      根据用户的输入信息生成哈希密码
          hashed = generate_password_hash(request.form.get("password"))
          username = request.form.get("username")
      
          # Add username and hashed password to the users table.
          try:
              information = db.execute("INSERT INTO users (username, hash) VALUES (?, ?)", username, hashed)
          except:
              # If the username already exists.
              return apology("Username already in use", 403)