Flaskアプリで、Mysqlと接続して情報を表示するという単純な処理で、DB接続のエラーハンドリングが失敗する。
mysql.connectorではなく、pymysqlライブラリを利用するようにしたら解消した。。。mysql.connectorとpymysqlを一緒に使うとダメなのかな。
mysql-connector-python=8.0.33
PyMySQL=1.1.0
失敗していた際のコード:
# app/utils/db_utils.py
import mysql.connector
from configparser import ConfigParser
import os
import pymysql
# ファイルの絶対パスを取得
file_path = os.path.abspath(os.path.join(os.path.dirname(__file__), 'config.ini'))
# コンフィグファイルの読み込み
config = ConfigParser()
config.read(file_path)
def get_db_connection():
return mysql.connector.connect(
~中略
)
# エラーメッセージ
MYSQL_DOWN_ERROR_MESSAGE = "MySQL is currently unavailable."
def get_record_from_db(current_number):
try:
conn = get_db_connection()
cursor = conn.cursor()
cursor.execute(ここにはSQL文が入る)
record = cursor.fetchone()
cursor.close()
conn.close()
if record:
return record[0]
else:
return None
except pymysql.MySQLError:
# MySQLがダウンしている場合はエラーメッセージを返す
return MYSQL_DOWN_ERROR_MESSAGE
訂正したコード:
import pymysql.cursors
from configparser import ConfigParser
import os
# ファイルの絶対パスを取得
file_path = os.path.abspath(os.path.join(os.path.dirname(__file__), 'config.ini'))
# コンフィグファイルの読み込み
config = ConfigParser()
config.read(file_path)
def get_db_connection():
connection = pymysql.connect(
~中略
cursorclass=pymysql.cursors.DictCursor # DictCursorを使用して結果を辞書形式で取得
)
return connection
# エラーメッセージ
MYSQL_DOWN_ERROR_MESSAGE = "MySQL is currently unavailable."
def get_record_from_db(current_number):
try:
conn = get_db_connection()
with conn.cursor() as cursor:
cursor.execute(ここにはSQL文が入る)
record = cursor.fetchone()
if record:
return record['explanation']
else:
return None
except pymysql.MySQLError:
# MySQLがダウンしている場合はエラーメッセージを返す
return MYSQL_DOWN_ERROR_MESSAGE