#docker
#MySQL
#python
#Flask

FlaskからDockerのMySQLコンテナに接続する

More than 1 year has passed since last update.

概要

Flaskのチュートリアルをやってみて、
DBはMySQLがいいよう。(´・ω・` ) みたいな人がいてさらに
GUIでテーブルを確認したいよう(´・ω・` )  ってなってたから
DockerのMySQLコンテナを簡易に立ててSequel Proで接続するまでをやります。

動作確認した環境

  • OSX 10.11
  • Docker for mac 17.06
  • Python 2.7.10
  • pip 9.0.1
  • Sequel Pro 1.1.2

前提

Flaskのチュートリアルをやります。
以下のサイトのSTEP0からSTEP3までが終わっている状態です。

$ tree

├── flaskr
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── config.py
│   ├── config.pyc
│   ├── flaskr.db
│   ├── models.py
│   ├── models.pyc
│   ├── static
│   │   └── style.css
│   ├── templates
│   │   ├── layout.html
│   │   └── show_entries.html
│   ├── views.py
│   └── views.pyc
├── manage.py
└── requirements.txt

スクリーンショット 2017-07-09 2.48.02.png

MySQLコンテナを立てる

mysqlのrootパスワードを MYSQL_ROOT_PASSWORD という環境変数に設定してください。
後で使います。
Mac側から接続できるようにポート番号 3306 をつないでおきます。

docker run -d -e MYSQL_ROOT_PASSWORD=your_root_password -p 3306:3306 mysql:5.7

Sequel Proを使用する

GUIで見た方がわかりやすいので、今回はSequel Proという
データベースクライアントソフトを使います。

Sequel Pro

起動すると、接続ウィンドウが開くと思うので、以下を入力します。

  • 名前: 好きな名前
  • ホスト: 0.0.0.0
  • ユーザ名: root
  • パスワード: 先ほど MYSQL_ROOT_PASSWORD に設定した値
  • データベース: 空白
  • ポート: 3306 (空白でOK)

下のように接続できて何もない画面に進めばOK

スクリーンショット 2017-07-09 3.03.43.png

次にデータベースを作成します。
上のメニューから データベース -> データベースを追加
データベースの名前とエンコードを入力してデータベースを作ります。
今回はデータベース名を「testdb」 エンコードを 「UTF-8」 に設定しました。

さらに、テーブルを作成します。
チュートリアルで作った掲示板のようなサービスをMySQLで動かすためには、
Flaskアプリケーションで指定されるテーブルを追加しておく必要があります。

では、画面一番左下の + ボタンを押して、テーブルを作成します。
名前を entries に設定します。
間違えると、テーブルが見つからずエラーになります。

また、構造のタブで、

  • title [VERCHAR] [長さ:255]
  • text [TEXT]

を設定します。
以下のようになればOKです。

スクリーンショット 2017-07-09 3.13.04.png

これでデータベースの準備ができました。

MySQLに接続する

ここからはまたFlaskに戻ります。

MySQLに接続するためには PyMySQL をインストールする必要があります。
以下のコマンドを実行します。

$ sudo pip install PyMySQL

次にMySQLを使用するように flaskr/config.py を変更します。
SQLALCHEMY_DATABASE_URI
mysql+pymysql://[ユーザ名]:[パスワード]@[ホスト]/[DB名] となるように
設定します。また、 SECRET_KEY も相変わらず適当な文字列を設定しておく必要があります。

flaskr/config.py
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:your_root_password@0.0.0.0/testdb'
SECRET_KEY = 'XXXXXXXXXXXXXXXXXX'

これで python manage.py を実行し、アプリケーションを動かします。
投稿したデータがSequel Pro上で確認できるところまでいけば
成功ですヾ( ゚д゚)人( ゚д゚)ノ゙