Elezthem
@Elezthem
Full Stack Developer

Sqlite3, OperationalError: unable to open database file, как обойти эту ошибку?

Я хочу подключить базу данных, но вылазит в консоль вот такая ошибка OperationalError: unable to open database file и конечно команды не работают) Файл с базой данных как вы могли понять не создается.

В общем это бот по экономике, у знакомого все нормально работало и исполнялось, а вот у меня до этого были ошибки, но я их исправил, а вот эту не особо не понимаю как исправить, может кто-то сможет подсказать? Ну и я сам впервые столкнулся с этой ошибкой.

Вот сам код из файла `databasses.py`

import aiosqlite
import disnake


class UsersDataBase:
    def __init__(self):
        self.name = 'basa/users.db'

    async def create_table(self):
        async with aiosqlite.connect(self.name) as db:
            cursor = await db.cursor()
            query = '''CREATE TABLE IF NOT EXISTS users (
                id INTEGER PRIMARY KEY,
                money INTEGER,
                premium INTEGER,
                like INTEGER
            )'''
            await cursor.execute(query)
            await db.commit()

    async def get_user(self, user: disnake.Member):
        async with aiosqlite.connect(self.name) as db:
            cursor = await db.cursor()
            query = 'SELECT * FROM users WHERE id = ?'
            await cursor.execute(query, (user.id,))
            return await cursor.fetchone()

    async def add_user(self, user: disnake.Member):
        async with aiosqlite.connect(self.name) as db:
            if not await self.get_user(user):
                cursor = await db.cursor()
                query = 'INSERT INTO users (id, like, money, premium) VALUES (?, ?, ?, ?)'
                await cursor.execute(query, (user.id, 0, 0, 0))
                await db.commit()

    async def update_money(self, user: disnake.Member, money: int, premium: int):
        async with aiosqlite.connect(self.name) as db:
            cursor = await db.cursor()
            query = 'UPDATE users SET money = money + ?, premium = premium + ? WHERE id = ?'
            await cursor.execute(query, (money, premium, user.id))
            await db.commit()

    async def update_likes(self, user: disnake.Member):
        async with aiosqlite.connect(self.name) as db:
            cursor = await db.cursor()
            query = 'UPDATE users SET like = money + 1 WHERE id = ?'
            await cursor.execute(query, (user.id))
            await db.commit()


    async def get_top(self):
        async with aiosqlite.connect(self.name) as db:
            cursor = await db.cursor()
            query = 'SELECT * FROM users ORDER BY money DESC'
            await cursor.execute(query)
            return await cursor.fetchall()
  • Вопрос задан
  • 899 просмотров
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Путь к файлу у тебя относительный, т.е. он будет зависеть от текущего рабочего каталога. А тот, в свою очередь, зависит от того, как ты запускаешь скрипт, и может меняться в ходе работы скрипта.
Так что если нужен путь именно относительно скрипта, используй pathlib.
from pathlib import Path
from sys import argv

script_dir = Path(argv[0]).parent.resolve()  # путь к каталогу скрипта
db_path = script_dir / 'basa' / 'users.db'  # путь к файлу в подкаталоге
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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