fix:条件項目が文字列型8桁,6桁,日付型で来られても大丈夫なように修正

This commit is contained in:
yono 2025-06-21 01:44:57 +09:00
parent 05195b7b31
commit b70974b28f
2 changed files with 44 additions and 7 deletions

View File

@ -23,7 +23,11 @@ def exec():
for jskult_archive_manage_data in jskult_archive_manage_data_list: for jskult_archive_manage_data in jskult_archive_manage_data_list:
# 対象テーブルで条件項目が条件年月以前のデータを取得 # 対象テーブルで条件項目が条件年月以前のデータを取得
archive_data = jskult_archive_manager.get_archive_data( archive_data = jskult_archive_manager.get_archive_data(
jskult_archive_manage_data["target_table"], jskult_archive_manage_data["filter_column"], jskult_archive_manage_data["filter_date"]) jskult_archive_manage_data["target_table"],
jskult_archive_manage_data["filter_column_name"],
jskult_archive_manage_data["filter_column_type"],
jskult_archive_manage_data["filter_column_digit"],
jskult_archive_manage_data["filter_date"])
# 取得データが0件の場合、スキップする # 取得データが0件の場合、スキップする
if not archive_data: if not archive_data:
logger.info( logger.info(
@ -60,7 +64,9 @@ def exec():
# アーカイブしたデータをDBから削除 # アーカイブしたデータをDBから削除
jskult_archive_manager.delete_archive_data( jskult_archive_manager.delete_archive_data(
jskult_archive_manage_data["target_table"], jskult_archive_manage_data["target_table"],
jskult_archive_manage_data["filter_column"], jskult_archive_manage_data["filter_column_name"],
jskult_archive_manage_data["filter_column_type"],
jskult_archive_manage_data["filter_column_digit"],
jskult_archive_manage_data["filter_date"]) jskult_archive_manage_data["filter_date"])
logger.info( logger.info(
f"アーカイブしたデータのDBから削除に成功しました。対象テーブル{jskult_archive_manage_data['target_table']} 条件年月:{jskult_archive_manage_data['filter_date']}") f"アーカイブしたデータのDBから削除に成功しました。対象テーブル{jskult_archive_manage_data['target_table']} 条件年月:{jskult_archive_manage_data['filter_date']}")

View File

@ -17,7 +17,9 @@ class JskultArchiveManager:
sql = """ sql = """
select select
target_table target_table
, filter_column , filter_column_name
, filter_column_type
, filter_column_digit
, filter_date , filter_date
, run_interval_months , run_interval_months
, prev_filter_date , prev_filter_date
@ -35,17 +37,43 @@ class JskultArchiveManager:
finally: finally:
self._db.disconnect() self._db.disconnect()
def get_archive_data(self,target_table:str, filter_column:str, filter_date:str): def _filter_column_to_date(self,filter_column_name:str , filter_column_type:str, filter_column_digit:int):
""" filter_columnを日付型へ変換"""
try:
logger.info("処理開始_filter_column_to_date")
if filter_column_type == 'date':
filter_column = filter_column_name
elif filter_column_type == 'varchar' and filter_column_digit == 8:
filter_column = f"str_to_date({filter_column_name},'%Y%m%d')"
elif filter_column_type == 'varchar' and filter_column_digit == 6:
filter_column = f"str_to_date(concat({filter_column_name} , '01'),'%Y%m%d')"
else:
raise Exception("条件項目データ型もしくは条件項目桁数が不正です。")
logger.info("処理終了_filter_column_to_date")
return filter_column
except Exception as e:
logger.info("異常終了_filter_column_to_date")
raise
def get_archive_data(self,target_table:str, filter_column_name:str, filter_column_type:str, filter_column_digit:int, filter_date:str):
"""アーカイブするデータを取得""" """アーカイブするデータを取得"""
try: try:
logger.info("処理開始get_archive_data") logger.info("処理開始get_archive_data")
filter_column = self._filter_column_to_date(filter_column_name, filter_column_type, filter_column_digit)
sql = f""" sql = f"""
select select
* *
from from
src07.{target_table} src07.{target_table}
where where
str_to_date({filter_column},'%Y%m%d') <= :filter_date; {filter_column} <= :filter_date;
""" """
self._db.connect() self._db.connect()
parameter_dict = {'filter_date' : filter_date} parameter_dict = {'filter_date' : filter_date}
@ -58,15 +86,18 @@ class JskultArchiveManager:
finally: finally:
self._db.disconnect() self._db.disconnect()
def delete_archive_data(self, target_table:str, filter_column:str, filter_date:str): def delete_archive_data(self, target_table:str, filter_column_name:str, filter_column_type:str, filter_column_digit:int, filter_date:str):
"""アーカイブしたデータを削除""" """アーカイブしたデータを削除"""
try: try:
logger.info("処理開始delete_archive_data") logger.info("処理開始delete_archive_data")
filter_column = self._filter_column_to_date(filter_column_name, filter_column_type, filter_column_digit)
sql = f""" sql = f"""
delete from delete from
src07.{target_table} src07.{target_table}
where where
str_to_date({filter_column},'%Y%m%d') <= :filter_date; {filter_column} <= :filter_date;
""" """
self._db.connect() self._db.connect()
self._db.begin() self._db.begin()