db-init-fix
All checks were successful
Deploy on push / deploy (push) Successful in 1m13s

This commit is contained in:
Untone 2024-10-14 09:12:20 +03:00
parent 7c86d95f5e
commit 5dc61dc397

View File

@ -28,6 +28,7 @@ else:
echo=False,
connect_args={"check_same_thread": False}
)
inspector = inspect(engine)
configure_mappers()
T = TypeVar("T")
@ -37,7 +38,7 @@ FILTERED_FIELDS = ["_sa_instance_state", "search_vector"]
def create_table_if_not_exists(engine, table):
inspector = inspect(engine)
if not inspector.has_table(table.__tablename__):
if table and not inspector.has_table(table.__tablename__):
table.__table__.create(engine)
logger.info(f"Table '{table.__tablename__}' created.")
else:
@ -109,12 +110,23 @@ warnings.simplefilter("always", exc.SAWarning)
# Функция для извлечения SQL-запроса из контекста
def get_statement_from_context(context):
if context is None or not hasattr(context, 'compiled'):
return None
query = ''
compiled = context.compiled
if compiled is None or not hasattr(compiled, 'string'):
return None
return compiled.string
if compiled:
compiled_statement = compiled.string
compiled_parameters = compiled.params
if compiled_statement:
if compiled_parameters:
try:
# Безопасное форматирование параметров
query = compiled_statement % compiled_parameters
except Exception as e:
logger.error(f"Error formatting query: {e}")
else:
query = compiled_statement
if query:
query = query.replace("\n", " ").replace(" ", " ").replace(" ", " ").strip()
return query
# Обработчик события перед выполнением запроса
@ -127,22 +139,15 @@ def before_cursor_execute(conn, cursor, statement, parameters, context, executem
# Обработчик события после выполнения запроса
@event.listens_for(Engine, "after_cursor_execute")
def after_cursor_execute(conn, cursor, statement, parameters, context, executemany):
query = get_statement_from_context(context)
if query is not None:
logger.debug(query)
def create_tables_if_not_exist(engine, base):
inspector = inspect(engine)
for table_name, table in base.metadata.tables.items():
try:
if not inspector.has_table(table_name):
table.create(engine)
logger.info(f"Table '{table_name}' created.")
else:
logger.info(f"Table '{table_name}' already exists.")
except Exception as e:
logger.error(f"Error while creating table '{table_name}': {str(e)}")
# Заменяем Base.metadata.create_all(bind=engine) на:
create_tables_if_not_exist(engine, Base)
if hasattr(conn, "cursor_id") and conn.cursor_id == id(cursor):
query = get_statement_from_context(context)
if query:
elapsed = time.time() - conn.query_start_time
if elapsed > 1:
query_end = query[-16:]
query = query.split(query_end)[0] + query_end
logger.debug(query)
elapsed_n = math.floor(elapsed)
logger.debug('*' * (elapsed_n))
logger.debug(f"{elapsed:.3f} s")
del conn.cursor_id # Удаление идентификатора курсора после выполнения