From f64a881871911589ce3fed2c25d03405acc3d5c2 Mon Sep 17 00:00:00 2001 From: "shimoda.m@nds-tyo.co.jp" Date: Mon, 4 Sep 2023 15:33:35 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=E3=83=A1=E3=83=A2=E3=83=AA=E3=82=92?= =?UTF-8?q?=E5=8A=B9=E7=8E=87=E3=82=88=E3=81=8F=E4=BD=BF=E7=94=A8=E3=81=99?= =?UTF-8?q?=E3=82=8B=E3=81=9F=E3=82=81=E3=80=81SELECT=E7=B5=90=E6=9E=9C?= =?UTF-8?q?=E3=82=92=E3=82=B8=E3=82=A7=E3=83=8D=E3=83=AC=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E3=81=AB=E3=81=97=E3=81=A6=E8=BF=94=E3=81=99=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB=E4=BF=AE=E6=AD=A3(=5Fto=5Fdataframe=E4=BB=A5=E5=A4=96?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecs/jskult-webapp/src/db/database.py | 5 +++-- ecs/jskult-webapp/src/db/db_row_generator.py | 14 ++++++++++++++ .../src/repositories/bio_sales_lot_repository.py | 2 +- 3 files changed, 18 insertions(+), 3 deletions(-) create mode 100644 ecs/jskult-webapp/src/db/db_row_generator.py diff --git a/ecs/jskult-webapp/src/db/database.py b/ecs/jskult-webapp/src/db/database.py index 32e1fdc2..c729faf5 100644 --- a/ecs/jskult-webapp/src/db/database.py +++ b/ecs/jskult-webapp/src/db/database.py @@ -4,6 +4,7 @@ from sqlalchemy.engine.url import URL from sqlalchemy.orm import Session, sessionmaker from sqlalchemy.pool import Pool +from src.db.db_row_generator import DBRowGenerator from src.error.exceptions import DBException from src.logging.get_logger import get_logger from src.system_var import environment @@ -125,7 +126,7 @@ class DatabaseClient: DBException: DBエラー Returns: - list[dict]: カラム名: 値の辞書リスト + DBRowGenerator: カラム名: 値の辞書リストを返すジェネレータオブジェクト """ result = None try: @@ -138,7 +139,7 @@ class DatabaseClient: except Exception as e: raise DBException(e) - result_rows = result.mappings().all() + result_rows = DBRowGenerator(result.mappings()) return result_rows def execute(self, query: str, parameters=None) -> CursorResult: diff --git a/ecs/jskult-webapp/src/db/db_row_generator.py b/ecs/jskult-webapp/src/db/db_row_generator.py new file mode 100644 index 00000000..f45617b1 --- /dev/null +++ b/ecs/jskult-webapp/src/db/db_row_generator.py @@ -0,0 +1,14 @@ +from sqlalchemy import MappingResult + + +class DBRowGenerator: + """DBの検索結果を指定行数ごとに返すジェネレータ + """ + FETCH_MANY_SIZE = 2000 + + def __init__(self, mapping_result: MappingResult) -> None: + self.mapping_result = mapping_result + + def __iter__(self): + yield_per = self.mapping_result.yield_per(self.FETCH_MANY_SIZE) + yield from yield_per diff --git a/ecs/jskult-webapp/src/repositories/bio_sales_lot_repository.py b/ecs/jskult-webapp/src/repositories/bio_sales_lot_repository.py index 33182d6a..10c7cba3 100644 --- a/ecs/jskult-webapp/src/repositories/bio_sales_lot_repository.py +++ b/ecs/jskult-webapp/src/repositories/bio_sales_lot_repository.py @@ -71,8 +71,8 @@ class BioSalesLotRepository(BaseRepository): query = self.FETCH_SQL.format(where_clause=where_clause, limit=environment.BIO_SEARCH_RESULT_MAX_COUNT + 1) logger.debug(f'SQL: {query}') result = self._database.execute_select(query, parameter.model_dump()) - logger.debug(f'count= {len(result)}') models = [BioSalesLotDBModel(**r) for r in result] + logger.debug(f'count= {len(models)}') return models except Exception as e: logger.exception(f"DB Error : Exception={e.args}")