Задать вопрос
@mrcoldurfuck

Почему не записываются данные в бд SQLITE?

import sqlite3
import sys
import pathlib

script_dir = pathlib.Path(sys.argv[0]).parent
db_file = script_dir / 'database.db'
conn = sqlite3.connect(db_file)

class Database:
    def __init__(self, db_file):
        self.connection = sqlite3.connect('db_file', check_same_thread=False)
        self.cursor = self.connection.cursor()
        db = self.connection
        c = db.cursor()
        # c.execute("""CREATE TABLE users (
        #     id      INTEGER PRIMARY KEY AUTOINCREMENT,
        #     user_id INTEGER NOT NULL,
        #     money   INTEGER NOT NULL
        #                     DEFAULT (0)
        # );""")

    def user_exists(self, user_id):
        with self.connection:
            result = self.cursor.execute("Select * FROM 'users' WHERE 'user_id' = ?", (user_id,)).fetchall()
            return bool(len(result))
    def add_user(self, user_id):
        with self.connection:
            self.cursor.execute("INSERT INTO 'users' ('user_id') VALUES (?)", (user_id,))
    def user_money(self, user_id):
        with self.connection:
            result = self.cursor.execute("SELECT 'money' FROM 'users' WHERE 'user_id' = ?", (user_id,)).fetchmany(1)
            return int(result[0][0])
    def set_money(self, user_id, money):
        with self.connection:
            return self.cursor.execute("UPDATE 'users' SET 'money' = ? WHERE 'user_id' = ?", (money, user_id))

db = sqlite3.connect(db_file)

db.commit()
db.close()

при нажатие на кнопку для вывода кол-ва денег выдает ошибку: in user_money
return int(result[0][0])
IndexError: list index out of range
Данные в бд не появляются, не могу понять в чем проблема.
P.S. создание таблицы закомментировано, потому что она уже создана
  • Вопрос задан
  • 1133 просмотра
Подписаться 2 Простой 3 комментария
Решения вопроса 1
ipatiev
@ipatiev
Потомок старинного рода Ипатьевых-Колотитьевых
После запросов, выполняющих изменения в БД, надо вызывать
self.connection.commit()

И имена колонок и таблиц нельзя брать в одинарные кавычки. Потому что в одинарных кавычках пишутся строки.
И если даже иногда sqlite и смотрит сквозь пальцы на такую ошибку (когда она может понять по контексту, что имеется в виду), это не значит, что так будет везти всегда.
Строка 'money' никогда не будет равна числу.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@PavelMos
Надо проверить что делает функция записи "INSERT INTO 'users' ('user_id') VALUES (?)", (user_id,)) пользователя и функцию записи денег
После нее если базу посмотреть через менеджер, в таблице изменения отображаются ?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы