Flask

Flask MySQL接続ガイド:エラー処理・セキュリティ・Docker対応

ⓘ本ページはプロモーションが含まれています

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


スポンサードリンク

MySQL接続ドライバ比較

FlaskアプリケーションでMySQLを扱う際には、mysql-connector-pythonpymysqlが主流です。それぞれの特徴や使用上の注意点を以下にまとめます。

項目 mysql-connector-python pymysql
提供元 Oracle (公式ドライバ) Pythonコミュニティ
接続メソッド mysql.connector.connect() pymysql.connect()
自動再接続機能 reconnect() メソッドあり ❌ 無し(要カスタム実装)
パフォーマンス 一般的にやや重め 高速、軽量

注意: mysql-connector-pythonreconnect()メソッドは、pymysqlでは利用できないため、ドライバごとの処理が必要です。


接続情報のセキュア管理方法

接続情報をコードに直接記述するとリポジトリへの機密情報漏洩リスクがあります。以下に安全な実装方法を解説します。

環境変数と.envファイルの活用

  1. 環境変数使用法
    リスト形式で接続情報を取得する方法です。

python
import os
host = os.getenv("MYSQL_HOST")
user = os.getenv("MYSQL_USER")
password = os.getenv("MYSQL_PASSWORD")
database = os.getenv("MYSQL_DATABASE")

  1. .envファイルの構成例
    ソースコードから接続情報を分離するには、.gitignoreで管理する必要があります。

# .env
MYSQL_HOST=localhost
MYSQL_USER=your_username
MYSQL_PASSWORD=your_password
MYSQL_DATABASE=your_database

  1. python-dotenvによる読み込み
    .envファイルをPythonコードから読み込むには、以下のようにします。

python
from dotenv import load_dotenv
import os

load_dotenv()
host = os.getenv("MYSQL_HOST")
user = os.getenv("MYSQL_USER")

重要: 環境変数を使用する際は、.gitignore.envを追加してリポジトリに含めないよう注意してください。


エラーハンドリングの実装方法

MySQL接続時に発生するエラーを適切に対処することが重要です。以下は具体的な対応例とエラーメッセージの一覧です。

例外ハンドリングコード(共通化)

エラーメッセージの例

エラータイプ メッセージ例 対応処置
接続失敗 Access denied for user 'your_username'@'localhost' 認証情報を確認する
データベース未存在 Unknown database 'your_database' データベース名を再確認
ネットワークエラー Lost connection to MySQL server at 'reading initial communication packet' ドライバの再接続ロジックを実装

Lost connection対策と自動再接続

ネットワークの不安定やサーバー側のトラブルで「Lost connection」が発生する場合があります。以下に自動再接続の方法を解説します。

自動再接続ロジック(mysql-connector限定)

注意: pymysqlでは、この方法は使用不可です。pymysqlではカスタム実装が必要です。

タイムアウト設定の重要性

MySQL側で接続タイムアウトを設定することで、エラー発生時の待機時間を短縮できます。


Docker環境でのネットワーク構成とトラブルシューティング

Dockerを使用する際には、ポートマッピングやネットワークの設定が接続に影響します。以下に具体的な手順と確認項目を紹介します。

ポートマッピングの正しい設定方法

  1. docker-compose.ymlでMySQLコンテナを構築する際は、ポートマッピングを行います。

yaml
services:
db:
image: mysql:8.0
ports:
- "3307:3306"
environment:
MYSQL_ROOT_PASSWORD: rootpass

  1. ホスト名としてコンテナ名を使う
    Flaskアプリケーション側では、MySQLコンテナのサービス名(例: db)を使用します。

python
conn = pymysql.connect(
host="db", # コンテナ名で指定
user=os.getenv("MYSQL_USER"),
password=os.getenv("MYSQL_PASSWORD"),
db=os.getenv("MYSQL_DATABASE")
)

  1. ネットワーク確認コマンド
    接続エラーが発生した際は、以下のコマンドで状態を確認してください。

  2. docker ps: コンテナ起動状況の確認

  3. docker network inspect: ネットワーク構成の検査
  4. ping db: MySQLコンテナにアクセス可能かテスト

補足:ドライバ選択と環境変数のベストプラクティス

  • ドライバ選択ガイド:
  • 簡単な接続が必要な場合 → pymysql(軽量)
  • 公式サポートを重視する場合 → mysql-connector-python(MySQL公式)

  • 環境変数の命名規則:
    例: MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORDなど、すべて大文字で統一。


結論とまとめ

FlaskとMySQL接続を安定稼働させるには、以下がポイントです:

  1. ドライバ依存の処理(例: 自動再接続)に注意
  2. 安全な環境変数管理を行う
  3. エラーハンドリングを適切に対応
  4. Dockerネットワーク構成を明確に設定

本記事で紹介した知識とコードを参考にして、あなたのプロジェクトでも確実な接続実装を目指してください。

スポンサードリンク

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


-Flask