#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]
, потому что имя пользователя — это ваш первый столбец при выборе), так что это изменение, которое вам нужно внести в свой код. Надеюсь, я прояснил