From bf0205c91ffbaf2d842d57397da79d7804907e73 Mon Sep 17 00:00:00 2001 From: HellsSenju Date: Mon, 14 Oct 2024 21:18:07 +0400 Subject: [PATCH] =?UTF-8?q?=D1=80=D0=B5=D0=BF=D0=BE=D0=B7=D0=B8=D1=82?= =?UTF-8?q?=D0=BE=D1=80=D0=B8=D0=B8.=20=D0=BC=D0=BE=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D0=B8=20=D0=BF=D0=BE=D0=BA=D0=B0=20=D0=B1=D0=B5=D0=B7=20=D0=B2?= =?UTF-8?q?=D0=BD=D0=B5=D1=88=D0=BD=D0=B8=D1=85=20=D0=BA=D0=BB=D1=8E=D1=87?= =?UTF-8?q?=D0=B5=D0=B9=20(=D0=B5=D1=81=D0=BB=D0=B8=20=D0=BE=D0=BD=D0=B8?= =?UTF-8?q?=20=D0=B2=D0=BE=D0=BE=D0=B1=D1=89=D0=B5=20=D0=B5=D1=81=D1=82?= =?UTF-8?q?=D1=8C....)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/db.py | 7 ---- db/db_connection.py | 7 ++++ db/models/base.py | 5 +++ .../ch_experimentdb_experiment_data_model.py | 2 +- db/models/experiment_data_model.py | 4 +- db/models/experiment_parameters_model.py | 4 +- db/models/load_parameters_model.py | 4 +- db/models/recycling_parameters_model.py | 4 +- db/repositories/experiment_data_repos.py | 38 +++++++++++++++++ .../experiment_parameters_repos.py | 39 ++++++++++++++++++ db/repositories/load_parameters_repos.py | 33 +++++++++++++++ db/repositories/recycling_parameters_repos.py | 37 +++++++++++++++++ requirements.txt | Bin 226 -> 1512 bytes 13 files changed, 168 insertions(+), 16 deletions(-) delete mode 100644 db/db.py create mode 100644 db/db_connection.py create mode 100644 db/models/base.py create mode 100644 db/repositories/experiment_data_repos.py create mode 100644 db/repositories/experiment_parameters_repos.py create mode 100644 db/repositories/load_parameters_repos.py create mode 100644 db/repositories/recycling_parameters_repos.py diff --git a/db/db.py b/db/db.py deleted file mode 100644 index 6be58cd..0000000 --- a/db/db.py +++ /dev/null @@ -1,7 +0,0 @@ -from sqlalchemy import create_engine -from sqlalchemy.ext.declarative import declarative_base -from sqlalchemy.orm import sessionmaker - -engine = create_engine('sqlite:///example.db', echo=True) - -Base = declarative_base() \ No newline at end of file diff --git a/db/db_connection.py b/db/db_connection.py new file mode 100644 index 0000000..528db69 --- /dev/null +++ b/db/db_connection.py @@ -0,0 +1,7 @@ +from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine, async_sessionmaker + +# Асинхронное подключение к PostgreSQL +DATABASE_URL = 'postgresql+asyncpg://username:password@localhost:5432/database_name' +engine = create_async_engine(DATABASE_URL, echo=True) + +async_session = async_sessionmaker(engine) diff --git a/db/models/base.py b/db/models/base.py new file mode 100644 index 0000000..1c2dcc4 --- /dev/null +++ b/db/models/base.py @@ -0,0 +1,5 @@ +from sqlalchemy.orm import DeclarativeBase + + +class Base(DeclarativeBase): + pass \ No newline at end of file diff --git a/db/models/ch_experimentdb_experiment_data_model.py b/db/models/ch_experimentdb_experiment_data_model.py index a7cc595..97841d6 100644 --- a/db/models/ch_experimentdb_experiment_data_model.py +++ b/db/models/ch_experimentdb_experiment_data_model.py @@ -1,4 +1,4 @@ -from db.db import Base +from data_base.db import Base from sqlalchemy.orm import Mapped, mapped_column class ChExperimentDBExperimentData(Base): diff --git a/db/models/experiment_data_model.py b/db/models/experiment_data_model.py index b994a89..0ac0fcc 100644 --- a/db/models/experiment_data_model.py +++ b/db/models/experiment_data_model.py @@ -1,10 +1,10 @@ -from db.db import Base +from base import Base from sqlalchemy.orm import Mapped, mapped_column class ExperimentData(Base): __tablename__ = 'ExperimentData' - id: Mapped[int] = mapped_column(primary_key=True) + id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True) direction: Mapped[float] temperature: Mapped[float] nox: Mapped[float] diff --git a/db/models/experiment_parameters_model.py b/db/models/experiment_parameters_model.py index 9fb6a85..4b39fe1 100644 --- a/db/models/experiment_parameters_model.py +++ b/db/models/experiment_parameters_model.py @@ -1,10 +1,10 @@ -from db.db import Base +from base import Base from sqlalchemy.orm import Mapped, mapped_column class ExperimentParameters(Base): __tablename__ = 'ExperimentParameters' - id: Mapped[int] = mapped_column(primary_key=True) + id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True) outer_blades_count: Mapped[int] outer_blades_length: Mapped[float] outer_blades_angle: Mapped[float] diff --git a/db/models/load_parameters_model.py b/db/models/load_parameters_model.py index 7c61386..4027656 100644 --- a/db/models/load_parameters_model.py +++ b/db/models/load_parameters_model.py @@ -1,10 +1,10 @@ -from db.db import Base +from base import Base from sqlalchemy.orm import Mapped, mapped_column class LoadParameters(Base): __tablename__ = 'LoadParameters' - id: Mapped[int] = mapped_column(primary_key=True) + id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True) load: Mapped[int] primary_air_consumption: Mapped[float] secondary_air_consumption: Mapped[float] diff --git a/db/models/recycling_parameters_model.py b/db/models/recycling_parameters_model.py index 760975b..a21aae6 100644 --- a/db/models/recycling_parameters_model.py +++ b/db/models/recycling_parameters_model.py @@ -1,10 +1,10 @@ -from db.db import Base +from base import Base from sqlalchemy.orm import Mapped, mapped_column class RecyclingParameters(Base): __tablename__ = 'RecyclingParameters' - id: Mapped[int] = mapped_column(primary_key=True) + id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True) load_id: Mapped[int] recycling_level: Mapped[int] co2: Mapped[float] diff --git a/db/repositories/experiment_data_repos.py b/db/repositories/experiment_data_repos.py new file mode 100644 index 0000000..f4350e3 --- /dev/null +++ b/db/repositories/experiment_data_repos.py @@ -0,0 +1,38 @@ +from typing import Optional +from sqlalchemy import select +from db.db_connection import async_session +from db.models.experiment_data_model import ExperimentData + + +class ExperimentDataRepository: + @staticmethod + async def get_all() -> Optional[list[ExperimentData]]: + async with async_session() as session: + result = await session.execute(select(ExperimentData)) + return result.scalar.all() + + @staticmethod + async def get_by_id(id_: int) -> Optional[ExperimentData]: + async with async_session() as session: + result = await session.execute(select(ExperimentData).where(ExperimentData.id == id_)) + return result.scalars().first() + + + @staticmethod + async def create(direction: float, + temperature: float, + nox: float, + co2: float, + co: float, + file_id: str): + new_data = ExperimentData( + direction=direction, + temperature=temperature, + nox=nox, + co2=co2, + co=co, + file_id=file_id + ) + async with async_session() as session: + session.add(new_data) + await session.commit() diff --git a/db/repositories/experiment_parameters_repos.py b/db/repositories/experiment_parameters_repos.py new file mode 100644 index 0000000..82e28cd --- /dev/null +++ b/db/repositories/experiment_parameters_repos.py @@ -0,0 +1,39 @@ +from typing import Optional +from sqlalchemy import select +from db.db_connection import async_session +from db.models.experiment_parameters_model import ExperimentParameters + + +class ExperimentParametersRepository: + @staticmethod + async def get_all() -> Optional[list[ExperimentParameters]]: + async with async_session() as session: + result = await session.execute(select(ExperimentParameters)) + return result.scalar.all() + + @staticmethod + async def get_by_id(id_: int) -> Optional[ExperimentParameters]: + async with async_session() as session: + result = await session.execute(select(ExperimentParameters).where(ExperimentParameters.id == id_)) + return result.scalars().first() + + @staticmethod + async def create(outer_blades_count: int, + outer_blades_length: float, + outer_blades_angle: float, + middle_blades_count: int, + load_id: int, + recycling_id: int, + experiment_hash: str): + new_data = ExperimentParameters( + outer_blades_count=outer_blades_count, + outer_blades_length=outer_blades_length, + outer_blades_angle=outer_blades_angle, + middle_blades_count=middle_blades_count, + load_id=load_id, + recycling_id=recycling_id, + experiment_hash=experiment_hash + ) + async with async_session() as session: + session.add(new_data) + await session.commit() diff --git a/db/repositories/load_parameters_repos.py b/db/repositories/load_parameters_repos.py new file mode 100644 index 0000000..4419a68 --- /dev/null +++ b/db/repositories/load_parameters_repos.py @@ -0,0 +1,33 @@ +from typing import Optional +from sqlalchemy import select +from db.db_connection import async_session +from db.models.load_parameters_model import LoadParameters + + +class LoadParametersRepository: + @staticmethod + async def get_all() -> Optional[list[LoadParameters]]: + async with async_session() as session: + result = await session.execute(select(LoadParameters)) + return result.scalar.all() + + @staticmethod + async def get_by_id(id_: int) -> Optional[LoadParameters]: + async with async_session() as session: + result = await session.execute(select(LoadParameters).where(LoadParameters.id == id_)) + return result.scalars().first() + + @staticmethod + async def create(load: int, + primary_air_consumption: float, + secondary_air_consumption: float, + gas_inlet_consumption: float): + new_data = LoadParameters( + load=load, + primary_air_consumption=primary_air_consumption, + secondary_air_consumption=secondary_air_consumption, + gas_inlet_consumption=gas_inlet_consumption + ) + async with async_session() as session: + session.add(new_data) + await session.commit() diff --git a/db/repositories/recycling_parameters_repos.py b/db/repositories/recycling_parameters_repos.py new file mode 100644 index 0000000..0a26d02 --- /dev/null +++ b/db/repositories/recycling_parameters_repos.py @@ -0,0 +1,37 @@ +from typing import Optional +from sqlalchemy import select +from db.db_connection import async_session +from db.models.recycling_parameters_model import RecyclingParameters + + +class RecyclingParametersRepository: + @staticmethod + async def get_all() -> Optional[list[RecyclingParameters]]: + async with async_session() as session: + result = await session.execute(select(RecyclingParameters)) + return result.scalar.all() + + @staticmethod + async def get_by_id(id_: int) -> Optional[RecyclingParameters]: + async with async_session() as session: + result = await session.execute(select(RecyclingParameters).where(RecyclingParameters.id == id_)) + return result.scalars().first() + + @staticmethod + async def create(load_id: int, + recycling_level: int, + co2: float, + n2: float, + h2o: float, + o2: float): + new_data = RecyclingParameters( + load_id=load_id, + recycling_level=recycling_level, + co2=co2, + n2=n2, + h2o=h2o, + o2=o2 + ) + async with async_session() as session: + session.add(new_data) + await session.commit() diff --git a/requirements.txt b/requirements.txt index e030dc147434bbbe3db7222fdb1dfc384efbd89b..104c6d921dda775890b6f5ad8be601ecc1bc1d3b 100644 GIT binary patch literal 1512 zcmZux%TB{U4D=a^PYEJPc^x=#rxJ)0CsaZoQOhPxQbhQ8V8-6fZV`&MjbeK|9^3o# zy^x(O7E8Ph8pXJ7|l z`IuNRhHBjSObvK6@L4Eh@}!69M${E7RBZvBOaYpEcr_c${|AxUpL6B|SD8 z5zzBQhZ-GqKo1J#UY{M5o9S0_iSsar?-q>dPkdS~v=&-A*bZR&g!dH~1ytiqCJy#@ zc#LYJ5=1E!p+%GfA6CprT6t^|Q|lg;(u261z2MOUofBhLP98n1<1J7}?P8cXa!>J7 zd!{=x@;5`z9 literal 226 zcmYk1yAH!33`KYTB^F7PJ_d&Dsnn`dRdt|*Ca5V89+6o1_ClJWk{A2>9$yFM=r}H}aeUV%Vp}>!oWa THu6u%A7H2(q_=Z