Edit on GitHub

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.