From f394139d35b40d2e29cd59efa274d428d5e85d47 Mon Sep 17 00:00:00 2001 From: maksim Date: Wed, 20 Nov 2024 00:21:24 +0400 Subject: [PATCH] =?UTF-8?q?=D0=9D=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B9?= =?UTF-8?q?=D0=BB=20=D1=81=D0=B2=D1=8F=D0=B7=D0=B8.=20=D0=94=D0=BE=D0=B1?= =?UTF-8?q?=D0=B0=D0=B2=D0=B8=D0=BB=20=D0=BD=D0=B5=D0=BA=D0=BE=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D1=8B=D0=B5,=20=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6?= =?UTF-8?q?=D0=BD=D0=BE=20=D0=BD=D0=B5=20=D0=BD=D1=83=D0=B6=D0=BD=D1=8B?= =?UTF-8?q?=D0=B5=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=B8,=20=D0=BD?= =?UTF-8?q?=D0=BE=20=D1=82=D0=B0=D0=BA=20=D1=82=D0=BE=D1=87=D0=BD=D0=BE=20?= =?UTF-8?q?=D0=B2=D1=81=D0=B5=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=D0=B5?= =?UTF-8?q?=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/crud.py | 18 ++++++++++++++++++ db/repositories/experiment_parameters_repos.py | 3 ++- network/routes/experiment_parameters_router.py | 15 +++++++++++---- 3 files changed, 31 insertions(+), 5 deletions(-) diff --git a/db/crud.py b/db/crud.py index 25d873f..4411075 100644 --- a/db/crud.py +++ b/db/crud.py @@ -42,6 +42,24 @@ async def update(model_class: Type[T], id: int, updated_data: Dict[str, Any]) -> await session.commit() return await get_by_id(model_class, id) +# Надо переписать/раасмотреть update +async def update_exp(model_class: Type[T], id: int, updated_data: Dict[str, Any]) -> Optional[T]: + async with async_session_postgres() as session: + async with session.begin(): # Явная транзакция + stmt = ( + update_(model_class) + .where(model_class.id == id) + .values(**updated_data) + .returning(model_class) # Возвращаем обновленный объект + ) + result = await session.execute(stmt) + updated_instance = result.scalars().first() + + if not updated_instance: + return None + + return updated_instance # Возвращаем сразу обновленный объект + async def delete(model_class: Type[T], id: int) -> bool: async with async_session_postgres() as session: diff --git a/db/repositories/experiment_parameters_repos.py b/db/repositories/experiment_parameters_repos.py index 9103c18..794b779 100644 --- a/db/repositories/experiment_parameters_repos.py +++ b/db/repositories/experiment_parameters_repos.py @@ -53,4 +53,5 @@ async def save_experiment_to_db(df: pd.DataFrame): ) except Exception as e: print(f"Ошибка при сохранении данных: {e}") - raise HTTPException(status_code=500, detail=f"Ошибка при сохранении данных: {e}") \ No newline at end of file + raise HTTPException(status_code=500, detail=f"Ошибка при сохранении данных: {e}") + diff --git a/network/routes/experiment_parameters_router.py b/network/routes/experiment_parameters_router.py index d79bd89..2216bda 100644 --- a/network/routes/experiment_parameters_router.py +++ b/network/routes/experiment_parameters_router.py @@ -130,14 +130,21 @@ async def process_and_save_experiment_data(id: int): o2=o2 ) - # Обновляем ExperimentParameters, чтобы сохранить связи - experiment.load_id = load_params.id - experiment.recycling_id = recycling_params.id + # Обновляем ExperimentParameters + experiment = await update_exp( + ExperimentParameters, + id=experiment.id, + updated_data={ + "load_id": load_params.id, + "recycling_id": recycling_params.id + } + ) return { "message": "Данные успешно обработаны и сохранены.", "load_parameters": load_params, - "recycling_parameters": recycling_params + "recycling_parameters": recycling_params, + "updated_experiment_parameters": experiment } except Exception as e: