transabtion張ってLOADしたあとのUPSERTがコケたときに、orgがロールバックされないようにする

This commit is contained in:
x.azuma.m@nds-tyo.co.jp 2023-05-09 22:31:50 +09:00
parent 1bff52f8c7
commit 7a1941a7bc

View File

@ -19,8 +19,7 @@ class JjskDataLoadManager:
upsert_sql = mapper.get_upsert_sql(condkey) upsert_sql = mapper.get_upsert_sql(condkey)
try: try:
db.connect() # TODO:接続オプション local_infile = True が必要? db.connect()
db.begin()
# orgをtruncate # orgをtruncate
db.execute(f"TRUNCATE TABLE {table_name_org};") db.execute(f"TRUNCATE TABLE {table_name_org};")
@ -32,18 +31,19 @@ class JjskDataLoadManager:
logger.info(f'tsvデータをorgテーブルにLOAD : 件数({result.rowcount})') logger.info(f'tsvデータをorgテーブルにLOAD : 件数({result.rowcount})')
# org→srcにinsert select # org→srcにinsert select
db.begin()
result = db.execute(upsert_sql) result = db.execute(upsert_sql)
logger.info(f'orgテーブルをsrcテーブルにUPSERT : 件数({result.rowcount})') logger.info(f'orgテーブルをsrcテーブルにUPSERT : 件数({result.rowcount})')
db.commit() db.commit()
except Exception as e: # TODO:DB例外だけキャッチしたい except Exception as e:
db.rollback() db.rollback()
logger.error(e) logger.error(e)
raise e raise e
finally: finally:
db.disconnect() db.disconnect()
logger.debug("_import_to_db end") logger.debug("_import_to_db done")
return return
@classmethod @classmethod