Когда вызывать connection.close() при работе с телеграм ботом
Файл main.py моего бота выглядит так:
import asyncio
from aiogram import Bot, Dispatcher
from aiogram.client.default import DefaultBotProperties
from aiogram.enums import ParseMode
from config_data.config import Config, load_config
from handlers import main_handlers
from database import db
async def main() -> None:
config: Config = load_config()
default_properties = DefaultBotProperties(parse_mode=ParseMode.HTML)
bot = Bot(token=config.tg_bot.token, default=default_properties)
dp = Dispatcher()
dp.include_router(main_handlers.router)
db.create_tables()
await bot.delete_webhook(drop_pending_updates=True) # delete updates
await dp.start_polling(bot)
if __name__ == '__main__':
asyncio.run(main())
Так же в файле database.py у меня объявлен класс DBManager для работы с базой данных:
class DBManager:
def __init__(self, database_file):
self.database_file = database_file
self.connection = sqlite3.connect(database_file)
self.cursor = self.connection.cursor()
def create_tables(self):
# ...
def close(self):
self.connection.close()
и, как несложно догадаться:
db = DBManager('tg.db')
Бот постоянно запущен, но конечно далеко не всегда все работает идеально, хотелось бы чтобы при возникновении ошибки, когда бот "падал", так же закрывалось соединение с базой данных. Да и вообще когда я самостоятельно останавливаю работу бота. Но я не понимаю где лучше всего расположить вызов close(), по крайней мере сильно не меняя файл database.py