Использование пользовательского ввода (python 3.7) в sqlite3

#python-3.x #sqlite

#python-3.x #sqlite

Вопрос:

Эй, ребята, я сейчас работаю над задачей и пытаюсь добавить функцию входа, которая запрашивает у пользователя его имя пользователя, а затем проверяет, соответствует ли их ввод чему-либо в базе данных. Извините за плохое кодирование, это мой второй год, и я в 10 классе.


 import sqlite3

db = sqlite3.connect('library.db')

cursor = db.cursor()

result = cursor.fetchall

def login():
    user = input("VAT IS YAH USERNAM: ")
    pastuser = user
    user = ("%"   user   "%")
    cursor.execute("SELECT username FROM Users WHERE username LIKE "   user)
    result = cursor.fetchall()
    if result == pastuser:
        print("VAT IS YAH PASWRD")

login()
  

Комментарии:

1. И в чем именно проблема?

Ответ №1:

Несмотря на отсутствие проблемы, в вашем SELECT заявлении были синтаксические ошибки, потому что оно отсутствует " между % знаками LIKE , поэтому измените

 user = ("%"   user   "%")
  

Для

 user = (""%"   user   "%"")
  

Также вы сравниваете result с pastuser , но результатом является список кортежей со всеми кортежами, возвращенными из SELECT , если вы хотите проверить только первое изменение, с которым столкнулся пользователь

 if result == pastuser:
  

Для

 if result[0][0] == pastuser:
  

или вы можете изменить fetchall метод на fetchone , который возвращает один кортеж.

Если вы хотите выполнить итерацию для всех пользователей:

 for u in result:
    ...
  

Комментарии:

1. Привет, спасибо за помощь, он избавился от синтаксической ошибки, но он по-прежнему не обрабатывает код в операторе if. Я постараюсь это исправить, но если бы вы могли помочь, это было бы очень ценно.

2. При использовании fetchall вы извлекаете список кортежей, содержащий все данные, возвращенные в вашем операторе select. Поскольку возвращаемый файл представляет собой список из N кортежей, вы не можете просто сравнить этот список с одной строкой, поскольку типы данных совершенно разные. Для сравнения с одной строкой вам необходимо получить доступ к конкретной строке, которую вы не хотите сравнивать. В моем примере я получил доступ к первому кортежу (the first [0] ) в его первом элементе (втором [0] , потому что имя пользователя — это ваш первый столбец при выборе), так что это изменение, которое вам нужно внести в свой код. Надеюсь, я прояснил