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

View File

@ -17,7 +17,9 @@ class JskultArchiveManager:
sql = """
select
target_table
, filter_column
, filter_column_name
, filter_column_type
, filter_column_digit
, filter_date
, run_interval_months
, prev_filter_date
@ -34,18 +36,44 @@ class JskultArchiveManager:
raise
finally:
self._db.disconnect()
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
def get_archive_data(self,target_table:str, filter_column:str, filter_date:str):
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:
logger.info("処理開始get_archive_data")
filter_column = self._filter_column_to_date(filter_column_name, filter_column_type, filter_column_digit)
sql = f"""
select
*
from
src07.{target_table}
where
str_to_date({filter_column},'%Y%m%d') <= :filter_date;
{filter_column} <= :filter_date;
"""
self._db.connect()
parameter_dict = {'filter_date' : filter_date}
@ -58,15 +86,18 @@ class JskultArchiveManager:
finally:
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:
logger.info("処理開始delete_archive_data")
filter_column = self._filter_column_to_date(filter_column_name, filter_column_type, filter_column_digit)
sql = f"""
delete from
src07.{target_table}
where
str_to_date({filter_column},'%Y%m%d') <= :filter_date;
{filter_column} <= :filter_date;
"""
self._db.connect()
self._db.begin()