This commit is contained in:
parent
7c86d95f5e
commit
5dc61dc397
|
@ -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 # Удаление идентификатора курсора после выполнения
|
||||
|
|
Loading…
Reference in New Issue
Block a user