読者です 読者をやめる 読者になる 読者になる

Google CloudSQL向けに、MySQL + GAE/Pyのローカル環境を構築する(Windows7版)

GoogleAppsScript GoogleAppEngine

アドベントカレンダーのネタGoogle CloudSQLを扱いましたが、ローカルにMySQLの環境がなかったことから、新たに構築する必要がありました。
Googleの公式ドキュメントでは、Windowsでの環境構築が記載されておらず少し悩んだため、メモを残します。

環境

MySQLのインストール

一番容易に導入できる方法を選び、msiファイルをダウンロードしました (mysql-5.5.28-win32.msi)。
MySQL :: Download MySQL Community Server


32bit/64bitどちらでも動くだろうと深くは考えず、32bitを選択しました。
なお、現時点の5.5.29で同じようなmsiファイルは無いため、アーカイブからダウンロードします。



設定内容は以下を参考にして行いました。文字コードは「utf-8」です。
http://awoni.net/personal-site/mysql/


MySQLのテーブルを作成

MySQL 5.5 Command Line Client」を使いました。

mysql> create database arukuma
Query OK, 1 row affected (0.03 sec)
mysql> use arukuma
Database changed
mysql> create table schedule (title VARCHAR(255), place VARCHAR(255), day DATE, lat DOUBLE, lng DOUBLE, entryID INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(entryID));
Query OK, 0 rows affected (0.05 sec)

MySQL-Pythonのインストール

以下のページよりダウンロードします(sourceforgeにもあるようですが、Python 64bit版があるのはこちらだけ)。
MySQL-python 1.2.3 for Windows and Python 2.7, 32bit and 64bit versions | codegood


なお、インストールするものはPythonのbitに合わせます。最初32bit版を入れたため動作せず、しばらく悩みました。
参考:[Python] OSX 10.6でMySQLdbのインストールに手間取った話 | taichino.com



GoogleAppEngine開発サーバーに起動パラメータを追加

以下の内容の起動パラメータを追加します。なお、今回は簡単に作ったため、ユーザーはrootを使用しています。

--mysql_user=root --mysql_password=<your password>

参考:Using Google Cloud SQL with the App Engine Python SDK - Google App Engine — Google Developers



コーディング上の注意

ローカルでMySQL + MySQL-Python を使う場合、文字コードを与えないとエラーで動作しませんでした。
逆に、本番環境では文字コードを与えると動作しなかったため、注意が必要です。

cn = rdbms.connect(instance=keys['instance'], database='arukuma')

# 文字コードを指定してあげないと、開発環境では文字化けする
# 開発環境のみ必要な設定(本番環境はutf-8化されているのか、大丈夫っぽい)
debug = os.environ.get('SERVER_SOFTWARE', '').startswith('Dev')
if debug:
    cn.set_character_set('utf8')

参考:Python, MySQLdb and UTF-8 - DASPRiD's v9.4


以上でGoogle CloudSQL向けの開発環境が構築できました。



参考:CloudSQLの準備

参考までに、CloudSQLのSQL Promptの内容を記載します。
まずはデータベースを作ります。

CREATE DATABASE arukuma;


次にテーブルを作って完了です。

CREATE TABLE schedule (title VARCHAR(255), place VARCHAR(255), day DATE, entryID INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(entryID));

参考:CloudSQLの価格

以下の公式ドキュメントを参照。
Pricing - Google Cloud SQL — Google Developers