Почему появляется ошибка sqlite3.OperationalError: no such table: users?

Рейтинг: 0Ответов: 2Опубликовано: 01.08.2023

Бот должен записывать message.from_user.id в базу, но при запуске кода появляется ошибка sqlite3.OperationalError: no such table: users. Скажу сразу, что файлы находятся в одной папке, тут ошибок нет. Не могу понять проблему.

Код бота:

import logging
from aiogram import Bot, Dispatcher, executor, types
import cfg
from db import Database

logging.basicConfig(level=logging.INFO)
bot = Bot(token=cfg.TOKEN)
dp = Dispatcher(bot)
db = Database('database.db')

@dp.message_handler()
async def mess_handler(message: types.Message):
    if not db.user_exists(message.from_user.id):
        db.add_user(message.from_user.id)

Код в db:

import sqlite3

class Database:
    def __init__(self, db_file):
        self.connection = sqlite3.connect(db_file)
        self.cursor = self.connection.cursor()

    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:
            return self.connection.execute("INSERT INTO 'users' ('user_id') VALUES (?)", (user_id,))

После запуска бота и комментария, появляется ошибка:

File "C:...\moderator.py", line 17, in mess_handler if not db.user_exists(message.from_user.id): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:...db.py", line 11, in user_exists result = self.cursor.execute("SELECT * FROM 'users' WHERE 'user_id' = ?", (user_id,)).fetchall() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ sqlite3.OperationalError: no such table: users

Ответы

▲ 0Принят

Нашел ошибку: файл *.db создавал в SQLiteStudio и неправильно указал расширение файла "все базы данных". Поэтому файл и таблица существовали, но по-отдельности. При создании таблицы в окне "имя базы данных" не появилось имя файла, но таблица была создана. В итоге удалил файл и таблицу, заново создал файл с правильным типом sqlite3 и таблицу. Все заработало.

▲ 1

У вас нет таблицы users. Можете сделать запрос в базу данных:

CREATE TABLE IF NOT EXISTS users (user_id INTEGER);