Привет, ребята, я сейчас работаю над задачей, и я пытаюсь добавить функцию входа в систему, которая запрашивает у пользователя его имя пользователя, а затем проверяет, соответствует ли его ввод чему-либо в базе данных. Извините за плохое кодирование, это мой второй год, и я в 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()





Несмотря на то, что проблема не возникла, в вашем SELECT утверждении есть синтаксические ошибки, потому что оно отсутствует " между знаками % на LIKE, поэтому измените
user = ("%" + user + "%")
к
user = ("\"%" + user + "%\"")
Также вы сравниваете result с pastuser, но результатом является список кортежей со всеми кортежами, возвращенными из SELECT, если вы хотите проверить только первое изменение, с которым столкнулся пользователь.
if result == pastuser:
к
if result[0][0] == pastuser:
или вы можете изменить метод fetchall на fetchone, который возвращает один кортеж.
Если вы хотите перебрать всех пользователей:
for u in result:
...
Привет, спасибо за помощь, он избавился от синтаксической ошибки, но все еще не обрабатывает код в операторе if. Я постараюсь исправить это, но если вы могли бы помочь, это было бы очень признательно.
Когда вы используете fetchall, вы получаете список кортежей, содержащих все данные, возвращенные в вашем операторе выбора. Поскольку возвращаемый результат представляет собой список с N кортежами, вы не можете просто сравнить этот список с одной строкой, так как типы данных совершенно разные. Чтобы сравнить с одной строкой, вам нужно получить доступ к конкретной строке, которую вы не хотите сравнивать. В моем примере я получил доступ к первому кортежу (первый [0]) в его первом элементе (второй [0], потому что имя пользователя — это ваш первый столбец при выборе), так что это изменение, которое вам нужно внести в свой код. Надеюсь, я ясно дал понять
А в чем именно проблема?