シュンカの日記

基本的に書きたいことを書いていくスタイル。

Xserver上でFlaskからMySQLに接続する方法

【スポンサーリンク】

Xserver上でFlask(PythonのWebフレームワーク)を利用する方法を記事にしました。

www.wanna-continue.com


今回は、FlaskからXserverのMySQLに接続する方法を説明します。(OSはUbuntu16.04)
下記サイトを参考にしています。
qiita.com

Python2系をインストールする

PythonからMySQLに接続するには、"mysql-python"というモジュールを使います。
が、このモジュールはPython3.xには対応していない模様。

というわけで、Python2.x系を利用する必要があります。
Pythonはこんな感じで使いたいモジュールによってバージョンを変える必要が(たまに)出てくるようなので、pyenvでバージョン管理できるようにしておきましょう。

Xserverにpyenvとpythonをインストールする手順は、下の記事の 2「pyenvをインストール」と3「pythonをインストール」を参考にしてください。
XserverでFlask(Pythonフレームワーク)を利用する方法 - シュンカの日記

上の記事では、python3.4.2をインストールしていますが、今回は2.7.xxをインストールしましょう。とりあえず、2.7.11とします。
sshでXserverに接続して、下記コードを実行します。

pyenv install 2.7.11

ぼくのようにpyenv環境下に複数バージョンのPythonを導入した場合は、下記コードを実行してpythonのバージョンを2.7.11に変更します。

pyenv local 2.7.11

これで、mysql-pythonを使える環境(python2.x系)になりました。

mysql-pythonをインストール

pipでmysql-pythonをインストールします。

pip install mysql-python

念のため、端末画面でpythonを起動して、"MySQLdb"がインポートできるか試してみましょう。
f:id:nukano0522:20170206211800p:plain

FlaskでMySQLに接続

FlaskでMySQLに接続して、テーブルにレコードを追加してみます。

事前にテーブルを作成

ここでは、Xserverのサーバーパネルから、テスト用のデータベースとテーブルを作成しておきます。
以下のようにしてみました。

  • データベース:test
  • テーブル:human
  • カラム:"id", "name", "birthday"

f:id:nukano0522:20170206211816p:plain

サンプルコード

冒頭の参考サイトを参考に、サンプルコードを作成しました。

index.cgi

#!/home/ユーザID/.pyenv/versions/2.7.11/bin/python
 
from wsgiref.handlers import CGIHandler
from testFlask import app
CGIHandler().run(app)

※1行目にPythonの在り処を書いています。2.7.11にするのを忘れないようにしましょう。


testFlask.py

# -*- coding: utf-8 -*-
from flask import Flask
import MySQLdb

app = Flask(__name__)

@app.route('/db')
def db_save():
    connector = MySQLdb.connect(host="DBサーバー名", db="DB名", user="DBユーザー名", passwd="パスワード", charset="utf8")
    cursor = connector.cursor()
    sql = u"insert into human values('1','shunka', '2000/04/01')"
    cursor.execute(sql)
    connector.commit()
    cursor.close()
    connector.close()

    return "レコード挿入完了"

※赤字箇所に、データベース接続情報(DBサーバー名、DB名、DBユーザー名、パスワード)を設定しましょう。


.htaccess

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /flask/hello/index.cgi/$1 [QSA,L]


以上、3ファイルを例えば、「public_html/flask/hello」配下に配置して、
http://www/flask/hello/db」にアクセスします。

下記のように表示されれば、データベースのテーブルにレコードが挿入されているはずです。
f:id:nukano0522:20170206213225p:plain

f:id:nukano0522:20170206212322p:plain

まとめ

以上でした。