dblog-debug3
All checks were successful
Deploy on push / deploy (push) Successful in 36s

This commit is contained in:
Untone 2024-03-28 16:34:27 +03:00
parent 6bc4fe42c4
commit 9a12cbcdde

View File

@ -9,6 +9,8 @@ from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import Session, configure_mappers from sqlalchemy.orm import Session, configure_mappers
from sqlalchemy.sql.schema import Table from sqlalchemy.sql.schema import Table
from sqlalchemy_searchable import make_searchable from sqlalchemy_searchable import make_searchable
from sqlalchemy.sql import Executable
from sqlalchemy.dialects.postgresql.psycopg2 import PGExecutionContext
from services.logger import root_logger as logger from services.logger import root_logger as logger
from settings import DB_URL from settings import DB_URL
@ -88,27 +90,23 @@ warnings.showwarning = warning_with_traceback
warnings.simplefilter('always', exc.SAWarning) warnings.simplefilter('always', exc.SAWarning)
# Перехватчики для журнала запросов SQLAlchemy
@event.listens_for(Engine, 'before_cursor_execute') @event.listens_for(Engine, 'before_cursor_execute')
def before_cursor_execute(conn, cursor, statement, parameters, context, executemany): def before_cursor_execute(conn, cursor, statement, parameters, context, executemany):
conn.query_start_time = time.time() conn.query_start_time = time.time()
conn.last_statement = '' conn.last_statement = ''
# noinspection PyUnusedLocal
@event.listens_for(Engine, 'after_cursor_execute') @event.listens_for(Engine, 'after_cursor_execute')
def after_cursor_execute(conn, cursor, statement, parameters, context, executemany): def after_cursor_execute(conn, cursor, statement, parameters, context, executemany):
if hasattr(conn, 'query_start_time'): if not isinstance(statement, Executable):
elapsed = time.time() - conn.query_start_time return
conn.query_start_time = None
query = ( if isinstance(context, PGExecutionContext):
f'{statement} % {parameters}' compiled_statement = context.compiled.string
if parameters compiled_parameters = context.compiled.params
else f'{statement}'.replace('\n', ' ') if compiled_statement:
) elapsed = time.time() - conn.query_start_time
logger.debug(conn) query = compiled_statement % compiled_parameters
logger.debug(cursor)
logger.debug(context) if elapsed > 1 and conn.last_statement != query:
if elapsed > 1: conn.last_statement = query
conn.last_statement = str(statement) logger.debug(f"\n{query}\n{'*' * math.floor(elapsed)} {elapsed:.3f} s\n")
logger.debug(f"\n{query}\n{'*' * math.floor(elapsed)} {elapsed:.3f} s\n")