database is locked проблема питон sqlite

Делаю бота в тг, хочу чтобы он просто записывал в базу данных id пользователя и username(пока что), но у меня никак не получается обойти эту ошибку

Запуск бота...
2024-07-20 13:43:38,781 (__init__.py:1095 MainThread) ERROR - TeleBot: "Infinity polling exception: database is locked"
2024-07-20 13:43:38,786 (__init__.py:1097 MainThread) ERROR - TeleBot: "Exception traceback:
Traceback (most recent call last):
  File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.11/site-packages/telebot/__init__.py", line 1090, in infinity_polling
    self.polling(non_stop=True, timeout=timeout, long_polling_timeout=long_polling_timeout,
  File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.11/site-packages/telebot/__init__.py", line 1178, in polling
    self.__threaded_polling(non_stop=non_stop, interval=interval, timeout=timeout, long_polling_timeout=long_polling_timeout,
  File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.11/site-packages/telebot/__init__.py", line 1253, in __threaded_polling
    raise e
  File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.11/site-packages/telebot/__init__.py", line 1215, in __threaded_polling
    self.worker_pool.raise_exceptions()
  File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.11/site-packages/telebot/util.py", line 150, in raise_exceptions
    raise self.exception_info
  File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.11/site-packages/telebot/util.py", line 93, in run
    task(*args, **kwargs)
  File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.11/site-packages/telebot/__init__.py", line 8707, in _run_middlewares_and_handler
    result = handler['function'](message)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<string>", line 33, in start
  File "/storage/emulated/0/db.py", line 38, in add_username
    return self.cursor.execute("UPDATE users SET username = ? WHERE user_id = ?", (username, user_id,)) #message.from_user.username
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
sqlite3.OperationalError: database is locked

Помогите пожалуйста, (я не профи и ошибка может быть тупая немного), я уже все перепробовала, вот код

import openai
import telebot
import telegram
import os
from ai_bot import chat_completion
from telebot import types
from datetime import datetime
from db import Database

date = datetime.today()
Weekday = date.weekday()

db = Database("DataTg.db")

def main():
    try:
        print("Запуск бота...")
        bot = telebot.TeleBot(
        token = '',
        )

        @bot.message_handler(commands=['start'])
        def start(message):
            markup = types.ReplyKeyboardMarkup(resize_keyboard = True)
            item1 = types.KeyboardButton('Отметить настроение')
            item2 = types.KeyboardButton('Старт')
            item3 = types.KeyboardButton('Помощь')
            markup.add(item1, item2, item3)
            text1 = f'Привет, {message.from_user.first_name}! Здесь ты можешь отслеживать свое настроение и получить помощь от чат ГПТ!'
            bot.send_message(message.chat.id, text1 .format(message.from_user), reply_markup = markup)
            if (not db.user_exists(message.from_user.id)):
                db.add_user(message.from_user.id)
                db.add_username(message.from_user.username, message.from_user.id)
            
        @bot.message_handler(content_types=['text'])
        def callback_handler(message):
            if message.text == 'Отметить настроение':
                markup = types.InlineKeyboardMarkup()
                item1 = types.InlineKeyboardButton(text = 'Счастливое', callback_data = 'happy')
                item2 = types.InlineKeyboardButton(text = 'Грустное', callback_data = 'sadness')
                item3 = types.InlineKeyboardButton(text = 'Злое', callback_data = 'furios')
                item4 = types.InlineKeyboardButton(text = 'Подавленное', callback_data = 'depressed')
                item5 = types.InlineKeyboardButton(text = 'Уставшее', callback_data = 'tired')
                item6 = types.InlineKeyboardButton(text = 'Тревожное', callback_data = 'anxiety')
                item7 = types.InlineKeyboardButton(text = 'Воодушевлённое', callback_data = 'motivated')
                item8 = types.InlineKeyboardButton(text = 'Спокойное', callback_data = 'calm')
                item9 = types.InlineKeyboardButton(text = 'Беззаботное', callback_data = 'carefree')
                markup.add(item1, item2, item3, item4, item5, item6, item7, item8, item9)
                global todayW
                match Weekday:
                    case 0:
                        todayW = 'понедельник'
                    case 1:
                        todayW = 'вторник'
                    case 2:
                        todayW = 'среду'
                    case 3:
                        todayW = 'четверг'
                    case 4:
                        todayW = 'пятницу'
                    case 5:
                        todayW = 'субботу'
                    case 6:
                        todayW = 'восквесенье'
                global msg
                msg = bot.send_message(message.chat.id, f'Сегодня вы можете отметить свое <d>настроение</d> на {todayW}!\nВыберите его ниже: ' .format(message.from_user), reply_markup = markup)
                print(3)

            @bot.callback_query_handler(func = lambda message: True)
            def callback_handler(call):
                if call.data == 'happy':
                    bot.edit_message_text(chat_id=message.chat.id, message_id=msg.message_id, text="Сохранено" .format(message.from_user))
                if call.data == 'sadness':
                    bot.edit_message_text(chat_id=message.chat.id, message_id=msg.message_id, text="Сохранено" .format(message.from_user))
                if call.data == 'furios':
                    bot.edit_message_text(chat_id=message.chat.id, message_id=msg.message_id, text="Сохранено" .format(message.from_user))
                if call.data == 'depressed':
                    bot.edit_message_text(chat_id=message.chat.id, message_id=msg.message_id, text="Сохранено" .format(message.from_user))
                if call.data == 'tired':
                    bot.edit_message_text(chat_id=message.chat.id, message_id=msg.message_id, text="Сохранено" .format(message.from_user))
                if call.data == 'anxiety':
                    bot.edit_message_text(chat_id=message.chat.id, message_id=msg.message_id, text="Сохранено" .format(message.from_user))
                if call.data == 'motivated':
                    bot.edit_message_text(chat_id=message.chat.id, message_id=msg.message_id, text="Сохранено" .format(message.from_user))
                if call.data == 'calm':
                    bot.edit_message_text(chat_id=message.chat.id, message_id=msg.message_id, text="Сохранено" .format(message.from_user))
                if call.data == 'carefree':
                    bot.edit_message_text(chat_id=message.chat.id, message_id=msg.message_id, text="Сохранено" .format(message.from_user))
            if message.text == 'Старт':
                start(message)
            print(2)

            if message.text == 'Помощь':
                markup = types.ReplyKeyboardMarkup(resize_keyboard = True)
            item1 = types.KeyboardButton('Отметить настроение')
            item2 = types.KeyboardButton('Старт')
            item3 = types.KeyboardButton('Помощь')
            markup.add(item1, item2, item3)
            bot.send_message(message.chat.id, 'Если вы обнаружили некоторые неисправности, пожалуйста, напишите мне сюда https://t.me/anonaskbot?start=5nagq ' .format(message.from_user), reply_markup = markup)
            print(1)
        """ 
            if errors:
                request = f"{request}\\n\\n" + ", ".join(errors)
                bot.delete_message(
                chat_id = message.from_user.id,
                message_id = writing.message_id,
                )
            bot.reply_to(message, request)"""
        bot.infinity_polling(none_stop = True)
    except Exception as e:
        print(f"Произошла ошибка: {e}")

if __name__ == '__main__':
 main()

Вот код базы:

import sqlite3

class Database:
    def __init__(self, db_file):
        self.con = sqlite3.connect(db_file)
        self.cursor = self.con.cursor()
        self.cursor.close()
        self.con.close()
        
    def add_user(self, user_id):
        self.con = sqlite3.connect("DataTg.db", check_same_thread=False)
        self.cursor = self.con.cursor()
        return self.cursor.execute("INSERT INTO users (user_id) VALUES (?)", (user_id,)) 
        self.con.commit()
        self.cursor.close()
        self.con.close()
        
    def user_exists(self, user_id):
        self.con = sqlite3.connect("DataTg.db", check_same_thread=False)
        self.cursor = self.con.cursor()
        result = self.cursor.execute("SELECT * FROM users WHERE user_id = ?", (user_id,)).fetchall()
        return bool(len(result))
        self.con.commit()
        self.cursor.close()
        self.con.close()
        
    def add_username(self, username, user_id):
        self.con = sqlite3.connect("DataTg.db", check_same_thread=False)
        self.cursor = self.con.cursor()
        return self.cursor.execute("UPDATE users SET username = ? WHERE user_id = ?", (username, user_id,)) 
        self.con.commit()
        self.cursor.close()
        self.con.close()

Я в каждом запросе просто все закрываю и в каждом открываю, все бесполезно( буду рада, если найдется решение


Ответы (0 шт):