feat: DB再起動、時間経過後のコネクション再確立の仕込み

This commit is contained in:
shimoda.m@nds-tyo.co.jp 2023-07-11 13:03:54 +09:00
parent f194f206e4
commit e87da068bb

View File

@ -1,10 +1,28 @@
from sqlalchemy import (Connection, CursorResult, Engine, QueuePool,
create_engine, text)
create_engine, event, exc, text)
from sqlalchemy.engine.url import URL
from sqlalchemy.pool import Pool
from src.error.exceptions import DBException
from src.logging.get_logger import get_logger
from src.system_var import environment
logger = get_logger('DB接続')
@event.listens_for(Pool, 'checkout')
def ping_connection(dbapi_connection, connection_record, connection_proxy):
"""コネクションが切れた場合、再接続"""
cursor = dbapi_connection.cursor()
try:
cursor.execute("SELECT 1")
except Exception as e:
logger.info(f'DB接続に失敗したため、リトライします: {e}')
# raise DisconnectionError - pool will try
# connecting again up to three times before raising.
raise exc.DisconnectionError()
cursor.close()
class Database:
"""データベース操作クラス"""