@FILMANS

Ошибка sqlite3.OperationalError: no such table: users Как исправить?

Пишу систему регистрации для ТГ бота, создал базу данных, все что нужно написал и запускаю и ошибка sqlite3.OperationalError: no such table: users
Код, где класс для базы данных: (оттуда ошибка)
import sqlite3
conn = sqlite3.connect('database.db')
class Database:
    def __init__(self, db_file):
        self.connection = sqlite3.connect(db_file)
        self.cursor = self.connection.cursor()
    
    def add_user(self, user_id):
        with self.connection:
           return self.cursor.execute("INSERT INTO 'users' ('user_id') VALUES (?)", (user_id,))
    
    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 set_nicname(self, user_id, nickname):
         with self.connection:
            return self.cursor.execute("UPDATE 'users' 'SET' 'nickname' = ? WHERE 'user_id' = ?", (nickname, user_id,))

    def get_signup(self, user_id):
        with self.connection:
            result = self.cursor.execute("SELECT 'signup' FROM 'users' WHERE 'user_id' = ?", (user_id,)).fetchall()
            for row in result:
                signup = str(row(0))
            return signup

    def set_signup(self, user_id, signup):
         with self.connection:
            return self.cursor.execute("UPDATE 'users' 'SET' 'signup' = ? WHERE 'user_id' = ?", (signup, user_id,))

И ошибка раздаётся из 14-той строчки кода - вот она
result = self.cursor.execute("SELECT * FROM 'users' WHERE 'user_id' = ?", (user_id,)).fetchall()
            return bool(len(result))

Если надо, то вот скрин базы данных и таблицы:
62b30f073f29a366949822.jpeg
Не пойму: В чём ошибка, если таблица существует...
Подскажите, кто знает.
  • Вопрос задан
  • 5119 просмотров
Решения вопроса 1
@FILMANS Автор вопроса
Значит задал вопрос и сам на него ответил.... Я просто вставил в код это:
self.cursor.execute("""CREATE TABLE IF NOT EXISTS users(
   id INTEGER PRIMARY KEY,
   user_id  NOT NULL,
   nickname VARCHAR (60),
   signup VARCHAR DEFAULT setnickname);
""")
conn.commit()

И ошибка ушла... Нужно было просто добавить squlite запрос в код...
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
conn = sqlite3.connect('database.db')
        self.connection = sqlite3.connect(db_file)

Как задаёшь db_file? Тоже как 'чтототам.db'? Тогда все шансы что ты споткнулся на относительных путях.

Относительный путь вычисляется НЕ относительно каталога, содержащего скрипт, а относительно текущего рабочего каталога. Который
  • может зависеть от способа запуска скрипта
  • может меняться в ходе его работы
  • может совпадать или не совпадать с каталогом, где лежит скрипт

Иными словами, твоя админка для БД смотрит на один файл, а скрипт - на другой. И в этом другом никаких таблиц, конечно, не создано.

Поэтому при доступе к файлам данных лучше явно конструировать абсолютный путь до них.
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)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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