Top.Mail.Ru
Ответы

Помогите решить проблему с запуском Python кода c sqlite3 библиотекой

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

123456789101112131415161718192021222324
 import sqlite3 as sql 
 
con = sql.connect('database.db') 
cur = con.cursor() 
truepass = '' 
 
cur.execute('CREATE TABLE IF NOT EXISTS users(id INTEGER PRIMARY KEY, name VARCHAR, pass VARCHAR)') 
con.commit() 
 
print('!reg to register, !lin to log in') 
command00 = input() 
 
if command00 == '!reg': 
	username = input('Your name: ') 
	userpass = input('Your pass: ') 
	cur.execute('INSERT INTO users(name, pass) VALUES(?, ?)', [username, userpass]) 
	con.commit() 
	cur.close() 
	con.close() 
if command00 == '!lin': 
	entername = input('Enter name: ') 
	enterpass = input('Enter pass: ') 
	cur.execute('SELECT pass into truepass FROM users WHERE name = entername') 
	print(truepass) 



P.S. - Я новичок в программировании поэтому не судите строго если у меня говнокод

По дате
По рейтингу
Аватар пользователя
Новичок

GPT-4o

Ваш код имеет несколько проблем, которые мешают его корректной работе. Основные ошибки:

1. Использование неверного синтаксиса для SQL команды `SELECT`.
2. Попытка использовать курсор после его закрытия.
3. Неинициализированная переменная `truepass`, которая никогда не получает значение из базы данных.

Вот исправленный вариант вашего кода:

12345678910111213141516171819202122232425262728293031323334353637
 
import sqlite3 as sql 
 
con = sql.connect('database.db') 
cur = con.cursor() 
 
cur.execute('CREATE TABLE IF NOT EXISTS users(id INTEGER PRIMARY KEY, name VARCHAR, pass VARCHAR)') 
con.commit() 
 
print('!reg to register, !lin to log in') 
command00 = input() 
 
if command00 == '!reg': 
    username = input('Your name: ') 
    userpass = input('Your pass: ') 
    cur.execute('INSERT INTO users(name, pass) VALUES(?, ?)', [username, userpass]) 
    con.commit() 
    print("Registration successful!") 
elif command00 == '!lin': 
    entername = input('Enter name: ') 
    enterpass = input('Enter pass: ') 
    cur.execute('SELECT pass FROM users WHERE name = ?', (entername,)) 
    result = cur.fetchone() 
    if result: 
        truepass = result[0] 
        if truepass == enterpass: 
            print("Login successful!") 
        else: 
            print("Incorrect password.") 
    else: 
        print("User not found.") 
else: 
    print("Unknown command") 
 
cur.close() 
con.close() 
 



Вот основные изменения:

1. В SQL-запросе для получения пароля используется корректный синтаксис: `cur.execute('SELECT pass FROM users WHERE name = ?', (entername,))`.
2. Используется метод `fetchone()` для получения результата запроса.
3. Проверяется, найден ли пользователь, и сравнивается введенный пароль с тем, который хранится в базе данных.
4. Курсор закрывается только после всех операций.
5. Добавлены сообщения для успешных и неудачных попыток регистрации и входа.

Этот код должен работать корректно и решать вашу задачу.

Аватар пользователя
Знаток

попробуй запустить мозг