LOAD文実行時にWARNINGが発生したとき、WARNING内容をINFOでログ出力して、例外スローするように改修

This commit is contained in:
x.azuma.m@nds-tyo.co.jp 2023-06-20 18:16:01 +09:00
parent 0390e23ca8
commit 7a9293187f
2 changed files with 10 additions and 2 deletions

View File

@ -27,7 +27,7 @@ class VjskDataLoadManager:
# orgをtruncate
db.execute(f"TRUNCATE TABLE {table_name_org};")
# orgにload ※warningは1148エラーになるらしい
# orgにload ※warningが発生すれば異常終了させる
sql = f"""\
LOAD DATA LOCAL INFILE :src_file_name
INTO TABLE {table_name_org}
@ -37,6 +37,14 @@ class VjskDataLoadManager:
"""
result = db.execute(sql, {"src_file_name": src_file_name})
logger.debug(sql)
# MEMO : sqlalchemy(engine=pymysql)としたときの result.context.cursor は、engineに依存してクラスが異なる
# https://nds-tyo.backlog.com/view/NEWDWH2021-1006#comment-266127218
if result.context.cursor._result.warning_count > 0:
result_w = db.execute("SHOW WARNINGS;")
for row in result_w.fetchall():
logger.info(f"SHOW WARNINGS : {row}")
raise Exception("LOAD文実行時にWARNINGが発生しました。")
logger.info(f'{data_name}tsvファイルを{table_name_org}にLOAD : 件数({result.rowcount})')
# org→srcにinsert select

View File

@ -1208,7 +1208,7 @@ class TestImportFileToDb:
VjskDataLoadManager.load(target_dict)
# 検証
assert str(e.value).startswith("SQL Error:") > 0
assert str(e.value).startswith("LOAD文実行時にWARNINGが発生しました。") > 0
# teardown