将用户输入与数据库中的用户名进行比较

时间:2019-04-14 04:51:55

标签: mysql python-3.x web-applications

将用户输入与已经使用的用户名数据库进行比较时遇到问题。数据库正在按预期运行,但是看起来像是一个简单的任务,事实证明它比我想象的要难。我想我缺少了一些非常简单的东西!我没有从代码中获得任何错误代码,但是当用户名实际上在数据库中时,它不会显示“采用用户名”。

到目前为止,我已经尝试过一个for循环来比较用户对数据库的输入,我已经尝试在数据库中创建用户名列表并遍历该列表以比较用户输入:

### check to see if the user is already in the database

import mysql.connector

# Database entry
mydb = mysql.connector.connect(
    host='Localhost',
    port='3306',
    user='root',
    passwd='passwd',#changed for help
    database='pylogin'
)

searchdb = 'SELECT username FROM userpass'
mycursor = mydb.cursor()
mycursor.execute(searchdb)
username = mycursor.fetchall()
print(username)
user = input('username')
for i in username:
    if user == username:
        print('username is taken')
    else:
        print("did not work")

输出无效:

[('Nate',), ('test',), ('test1',), ('test2',), ('n',), ('test4',)] username: n
('Nate',)
('test',)
('test1',)
('test2',)
('n',)
('test4',)

我希望上面的代码可以遍历每个数据库条目,并将其与用户的输入进行比较,以验证用户名是否已被使用。它应该显示“已使用用户名”,而不是“不起作用”。

2 个答案:

答案 0 :(得分:0)

欢迎您叠加内特!

您可以使用:

mycursor.execute("SELECT * FROM userpass WHERE username = ?", [(user)])
results = cursor.fetchall()

创建一个名为“结果”的变量,该变量将记录的所有(*)列值存储在userpass数据库表中,其中记录的用户名等于用户变量的值。

然后可以使用if语句:

if results:

如果结果变量具有值(如果记录的用户名等于表中用户变量的值),则运行该命令(如果使用了用户名)。

然后,如果运行打印“使用用户名”,则此if语句可以

完整代码:

import mysql.connector

# Database entry
mydb = mysql.connector.connect(
    host='Localhost',
    port='3306',
    user='root',
    passwd='passwd',#changed for help
    database='pylogin'
)

user = input('username')
mycursor.execute("SELECT * FROM userpass WHERE username = ?", [(user)])
results = cursor.fetchall()

if results:
    print('username is taken')
else:
    print("did not work")

答案 1 :(得分:0)

编辑* ,在将该代码添加到程序的其余部分并进行测试时,我发现它给出了每次使用的结果用户名,即使它是新用户名。如果您有任何解决此问题的建议,我欢迎他们。我将继续对此进行处理,并将在程序正常运行时发布结果。

我要感谢你们的帮助,我确实找到了想要的回复!

   <div class="container">
    <div class="box box1">
      <div class="a">a</div>
      <div class="c">c</div>
    </div>
    <div class="box box2">
      <div class="b">b</div>
      <div class="d">d</div>
    </div>
  </div>