简体   繁体   English

如何在sqlite数据库中检查用户名? Python

[英]How to check username in sqlite database? Python

I am trying to check for a username in a data base, when i do it works for the 1st username but after it doesnt work, i think i understand why but i cant work out an alternative.我正在尝试检查数据库中的用户名,当我这样做时,它适用于第一个用户名,但在它不起作用之后,我想我明白为什么,但我无法找到替代方案。 Here is my code:这是我的代码:

import sqlite3
conn = sqlite3.connect('tutorial.db')
c = conn.cursor()
def username():
    global limit
    global usernameinput
    usernameinput = input("What would you like your username to be?")
    limit = 0
    select_all_tasks(conn)
def create_table():
    c.execute('CREATE TABLE IF NOT EXISTS stuffToPlot(username TEXT, 
    password TEXT)')
    conn.close
def select_all_tasks(conn):
    global limit
    global passwordinput
    global rows
    c.execute("SELECT * FROM stuffToPlot")
    rows = c.fetchall()
    for row in rows:
        print(row)
    if usernameinput in row:
        print("Username Taken")
        username()
    else:
        if limit < 1:
            passwordinput = input("What would you like your password to 
            be?")
            limit = limit + 1
def data_entry():
    global passwordinput
    global row
    c.execute("INSERT INTO stuffToPlot VALUES(?, ?);",(usernameinput, 
    passwordinput))
    conn.commit()
    c.close()
    conn.close()


create_table()
username()
select_all_tasks(conn)
data_entry()

There is no error, it just doesn't register that the username is already in the database.没有错误,只是没有注册用户名已经在数据库中。

You need to indent the if statement and all the following lines to make it work, otherwise only the last row is tested.您需要缩进 if 语句和以下所有行以使其工作,否则只测试最后一行。

for row in rows:
    print(row)
    if usernameinput in row:
        print("Username Taken")

Also you could make it simpler :你也可以让它更简单:

# select only the field "username" from the table
c.execute("SELECT username FROM stuffToPlot") 
# build a set with all names, from the results given as [('name1',), ('name2',), ('name3',)]
names = {name[0] for name in c.fetchall()} 
if usernameinput in names:  
    print("Username Taken")
    username()
else:
    if limit < 1:

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM