@b1gpups

Ошибка sqlite3.OperationalError: no such column: cash, как решить?

у меня выскакивает ошибка sqlite3.OperationalError: no such column: cash при запуске кода
import sqlite3
import random


db = sqlite3.connect('dab.db')
sql = db.cursor()

db.commit()

sql.execute("""CREATE TABLE IF NOT EXISTS users (
    name TEXT,
    password TEXT,
    cash BIGINT
)""")


def reg():
    user_name = input("Enter name: ")
    user_password = input("Enter the password: ")

    sql.execute(f"SELECT name FROM users WHERE name = '{user_name}' ")
    if sql.fetchone() is None:
        sql.execute(f"INSERT INTO users VALUES (?,?,?)", (user_name,user_password,0))
        db.commit()

        print("Registred")
    else:
        print("This record exists")


def lag():
    global user_name
    user_name = input('Enter name: ')
    num = random.randint(1,2)

    for i in sql.execute(f'SELECT cash FROM users WHERE name = "{user_name}" '):
        balance = i[0]

    sql.execute(f"SELECT name FROM users WHERE name = '{user_name}' ")
    if sql.fetchone() is None:
        print('такого логина не существует. зарегистрируйтесь')
        reg()
    else:
        if num == 1:
            sql.execute(f"UPDATE users SET cash = {1000 + balance} WHERE name = '{user_name}' ")
            print('вы выйграли')
            db.commit()
        else:
            print('вы проиграли')
        

lag()
  • Вопрос задан
  • 79 просмотров
Пригласить эксперта
Ответы на вопрос 4
@o5a
Значит в таблице нет такого поля cash.
По всей видимости таблицу создавали изначально с другим составом полей, и она уже есть в базе (без cash), поэтому CREATE IF NOT EXISTS пропускается.

Или удалите таблицу из базы, если данные не нужны: "DROP TABLE users"

Или добавьте поле отдельно: "ALTER TABLE users ADD cash BIGINT".
Ответ написан
hottabxp
@hottabxp Куратор тега Python
Сначала мы жили бедно, а потом нас обокрали..
1)db = sqlite3.connect('dab.db')db - не подходящее имя(может завести в заблуждение)
2) sql = db.cursor()sql - не подходящее имя(может завести в заблуждение)
3) db.commit() после соединения не нужно делать коммит
4)
sql.execute(f"SELECT name FROM users WHERE name = '{user_name}' ")
уберите к чертям 'f' строки из sql запросов!
5) global user_name global нужно использовать тогда, когда у вас есть достаточный опыт программирования на Python, и вы знаете что делаете.

В 99% случаев, исключение выпадает из-за F-строк. Поэтому, замените все sql запросы на правильные, и будет все работать!
Ответ написан
@s4q
Что вы подтверждаете на пятой строке? Открытие базы данных?

sql.execute("""CREATE TABLE IF NOT EXISTS users (
name TEXT,
password TEXT,
cash BIGINT
)""")

db.commit()
Ответ написан
@Vindicar
А таблица уже существует в БД? Выведи-ка результат запроса к твоей БД:
SELECT sql FROM sqlite_master WHERE name = 'users';
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы