Помогите решить проблему с запуском Python кода c sqlite3 библиотекой
Я пишу код для регистрации и входа через терминал, но когда я попробовал взять из таблицы пароль того или иного пользователя мой код перестал запускаться.
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`, которая никогда не получает значение из базы данных.
Вот исправленный вариант вашего кода:
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. Добавлены сообщения для успешных и неудачных попыток регистрации и входа.
Этот код должен работать корректно и решать вашу задачу.
попробуй запустить мозг