Сравнение ввода пользователя с именами пользователей в базе данных - PullRequest
0 голосов
/ 14 апреля 2019

У меня проблема со сравнением ввода пользователя с базой данных уже используемых имен пользователей.База данных работает точно так, как она должна, но то, что кажется простой задачей, оказалось сложнее, чем я думал.Я полагаю, мне не хватает чего-то действительно простого!Я не получаю кодов ошибок из кода, но он не печатает «имя пользователя занято», когда имя пользователя фактически находится в базе данных.

До сих пор я пробовал цикл 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 голосов
/ 14 апреля 2019

редактировать * при добавлении этого кода остальной части программы и тестировании, которое я обнаружил, он выдает результаты имя пользователя, полученное каждый раз, даже если это новое имя пользователя. Если у вас есть какие-либо рекомендации, чтобы исправить это, я открыт для них. Я собираюсь продолжить работу над этим и опубликую результаты, когда программа работает должным образом.

Я хотел бы поблагодарить вас, ребята, за вашу помощь, я нашел ответ, который искал!

### check to see if user is already in database
import mysql.connector


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

)
mycursor = mydb.cursor()
user = input('username')
mycursor.execute('SELECT * FROM userpass WHERE username = username')
results = mycursor.fetchall()



if results:
    print('Username is taken')
else:
    print('did not work')`
0 голосов
/ 14 апреля 2019

Добро пожаловать в Stack Overflow Nate!

Вы можете использовать:

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

Чтобы создать переменную с именем 'results', в которой будут храниться все (*) значения столбца для записи втаблица базы данных userpass, где имя пользователя записи равно значению пользовательской переменной.

Затем можно использовать оператор if:

if results:

Это выполняется, если переменная результатовимеет значение (если есть запись с именем пользователя, равным значению пользовательской переменной в таблице) AKA, если имя пользователя взято.

Этот оператор if может затем при запуске print 'username

Полный код:

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")
...