src.scripts.db_recreate
Пересоздание БД
1"""Пересоздание БД""" 2 3import asyncio 4import logging 5import logging.config 6import os 7import sys 8 9sys.path.insert(1, os.path.dirname(sys.path[0])) 10 11 12from core.config import Base 13from db import models as _ 14from db.database import async_engine, execute_redis_query, redis_engine 15 16logging.config.fileConfig("log.ini", disable_existing_loggers=False) 17logging.getLogger("sqlalchemy.engine.Engine").setLevel(logging.INFO) 18logger = logging.getLogger() 19 20 21async def postgresql_recreate_tables(): 22 """Восстанавливает таблицы в PostgreSQL. 23 24 Эта функция удаляет все существующие таблицы и создает новые на основе 25 метаданных базы данных. 26 27 Raises: 28 Exception: Если возникла ошибка при выполнении операций с базой данных. 29 """ 30 async with async_engine.connect() as conn: 31 async_engine.echo = False 32 await conn.run_sync(Base.metadata.drop_all) 33 async_engine.echo = True 34 await conn.run_sync(Base.metadata.create_all) 35 await conn.commit() 36 37 38async def clear_redis(): 39 """Очищает базу данных Redis. 40 41 Эта функция очищает все данные из текущей базы данных Redis, используя 42 конвейер для выполнения команды `flushdb`. 43 44 Raises: 45 Exception: Если возникла ошибка при выполнении команды Redis. 46 """ 47 pipe = redis_engine.pipeline() 48 pipe.flushdb() 49 await execute_redis_query(pipe) 50 51 52if __name__ == "__main__": 53 54 async def start(): 55 """Запускает процесс восстановления таблиц и очистки Redis. 56 57 Эта функция собирает задачи для восстановления таблиц в PostgreSQL и 58 очистки базы данных Redis, обрабатывает возможные исключения и ведет журнал. 59 60 Raises: 61 Exception: Если возникла ошибка при подключении к БД. 62 """ 63 bases = await asyncio.gather( 64 *(postgresql_recreate_tables(), clear_redis()), 65 return_exceptions=True, 66 ) 67 68 for base in bases: 69 try: 70 if isinstance(base, Exception): 71 raise base 72 except Exception: 73 logger.exception("Возникло исключение при подключении к БД") 74 raise 75 76 loop = asyncio.get_event_loop() 77 loop.run_until_complete(start())
logger =
<RootLogger root (DEBUG)>
async def
postgresql_recreate_tables():
22async def postgresql_recreate_tables(): 23 """Восстанавливает таблицы в PostgreSQL. 24 25 Эта функция удаляет все существующие таблицы и создает новые на основе 26 метаданных базы данных. 27 28 Raises: 29 Exception: Если возникла ошибка при выполнении операций с базой данных. 30 """ 31 async with async_engine.connect() as conn: 32 async_engine.echo = False 33 await conn.run_sync(Base.metadata.drop_all) 34 async_engine.echo = True 35 await conn.run_sync(Base.metadata.create_all) 36 await conn.commit()
Восстанавливает таблицы в PostgreSQL.
Эта функция удаляет все существующие таблицы и создает новые на основе метаданных базы данных.
Raises:
- Exception: Если возникла ошибка при выполнении операций с базой данных.
async def
clear_redis():
39async def clear_redis(): 40 """Очищает базу данных Redis. 41 42 Эта функция очищает все данные из текущей базы данных Redis, используя 43 конвейер для выполнения команды `flushdb`. 44 45 Raises: 46 Exception: Если возникла ошибка при выполнении команды Redis. 47 """ 48 pipe = redis_engine.pipeline() 49 pipe.flushdb() 50 await execute_redis_query(pipe)
Очищает базу данных Redis.
Эта функция очищает все данные из текущей базы данных Redis, используя
конвейер для выполнения команды flushdb
.
Raises:
- Exception: Если возникла ошибка при выполнении команды Redis.