This commit is contained in:
parent
7c86d95f5e
commit
5dc61dc397
|
@ -28,6 +28,7 @@ else:
|
||||||
echo=False,
|
echo=False,
|
||||||
connect_args={"check_same_thread": False}
|
connect_args={"check_same_thread": False}
|
||||||
)
|
)
|
||||||
|
|
||||||
inspector = inspect(engine)
|
inspector = inspect(engine)
|
||||||
configure_mappers()
|
configure_mappers()
|
||||||
T = TypeVar("T")
|
T = TypeVar("T")
|
||||||
|
@ -37,7 +38,7 @@ FILTERED_FIELDS = ["_sa_instance_state", "search_vector"]
|
||||||
|
|
||||||
def create_table_if_not_exists(engine, table):
|
def create_table_if_not_exists(engine, table):
|
||||||
inspector = inspect(engine)
|
inspector = inspect(engine)
|
||||||
if not inspector.has_table(table.__tablename__):
|
if table and not inspector.has_table(table.__tablename__):
|
||||||
table.__table__.create(engine)
|
table.__table__.create(engine)
|
||||||
logger.info(f"Table '{table.__tablename__}' created.")
|
logger.info(f"Table '{table.__tablename__}' created.")
|
||||||
else:
|
else:
|
||||||
|
@ -109,12 +110,23 @@ warnings.simplefilter("always", exc.SAWarning)
|
||||||
|
|
||||||
# Функция для извлечения SQL-запроса из контекста
|
# Функция для извлечения SQL-запроса из контекста
|
||||||
def get_statement_from_context(context):
|
def get_statement_from_context(context):
|
||||||
if context is None or not hasattr(context, 'compiled'):
|
query = ''
|
||||||
return None
|
|
||||||
compiled = context.compiled
|
compiled = context.compiled
|
||||||
if compiled is None or not hasattr(compiled, 'string'):
|
if compiled:
|
||||||
return None
|
compiled_statement = compiled.string
|
||||||
return 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")
|
@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, "cursor_id") and conn.cursor_id == id(cursor):
|
||||||
query = get_statement_from_context(context)
|
query = get_statement_from_context(context)
|
||||||
if query is not None:
|
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)
|
logger.debug(query)
|
||||||
|
elapsed_n = math.floor(elapsed)
|
||||||
|
logger.debug('*' * (elapsed_n))
|
||||||
def create_tables_if_not_exist(engine, base):
|
logger.debug(f"{elapsed:.3f} s")
|
||||||
inspector = inspect(engine)
|
del conn.cursor_id # Удаление идентификатора курсора после выполнения
|
||||||
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)
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user