Как проверить, возвращает ли запрос SQL из переменной input строку в Python? - PullRequest
0 голосов
/ 08 февраля 2020

Я пытаюсь создать функцию для проверки, если имя пользователя уже занято.

signup_username = input("Username: ")

check_username = cursor.execute(f"""SELECT username
                                    FROM user
                                    WHERE username = '{signup_username}'""")

while check_username.rowcount != 0:

    print("Username already taken.")
    signup_username = input("Username: ")

По какой-то причине, хотя в пользовательской таблице еще есть только одна строка, независимо от того, что я введите ввод signup_username, он застрянет в то время как l oop, как будто имя пользователя уже занято.

Моя база данных подключена. Все остальное работает, но по какой-то причине это не работает. Есть идеи как это исправить?

1 Ответ

0 голосов
/ 08 февраля 2020

В вашем коде есть две проблемы, первая из которых заключается в том, что вы не меняете запрос внутри вашего l oop и, таким образом, по-прежнему извлекаете данные с исходным именем пользователя.

Вторая проблема заключается в том, что .rowcount всегда возвращает -1 для SELECT запросов. Если вы попытались распечатать переменные

>>> cursor.execute("select * from user").rowcount
-1

Из документации :

В соответствии с требованиями Python DB API Spe c, количество строк Атрибут «равен -1, если на курсоре не было выполнено executeXX () или количество строк последней операции не определено интерфейсом».

Сюда входят операторы SELECT, поскольку мы не можем определить количество строк, произведенных запросом, пока все строки не будут получены.

Это означает, что все SELECT операторы не будут иметь rowcount .


Вместо этого вы хотите выполнить .fetchone() и проверить, не пусто ли это. Если это так, значит, у вас уже есть это имя пользователя в db

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...