KEIS BLOGは株式会社ケイズ・ソフトウェアが運営しています。

KEIS BLOG

Python3.4 + Pyramid + SQLAlchemy その1

LINEで送る
Pocket

git2.0のニュースでも書いてやんよ!!と思ってgitの公式サイトのぞいていたら色々な方に先を越されて、git2.0のことを書くにかけなくなった林です。
無駄ではなかったのでよかったです。
また便利コマンドを色々覚えられたので満足(負け惜しみ)

さてさて、そろそろ技術ネタといきたいと思います。

今回社内でPythonを使って勤怠管理システムを作成してみました。
Pythonを選んだ理由は私自身がちょっとした仕事で使ってみたかったから。
ということでございます。

選んだフレームワークはPyramidです。
pyramid-small
Pythonのフレームワークは色々とあるので、最近気になっていたPyramidさんをという感じです。
まぁこれも試してみたかったから。といったところです。

構成はこんな感じです。
Python3.4
Pyramid1.5
SQLAlchemy
pyramid_mako
MariaDB Galera Cluster

最初にやってみた感想ですが、自由度が高い。モダンなMVCモデルではなく、RVモデルと説明がありました。
Resource Viewモデルだったかな。
いわゆる明確なModel, Controllerというくくりはないそうです。

結構ここは引っかかりました。なんかそんなことしたら肥大化すんじゃねーかと。
きれいな作り方をしらないとこうなってしまうんだろうかーとか色々悶々とします。
美しいソース見てみたいですね。
なんだかんだで構造をMVC型に切り替えてしまったわけなんですが。
その件は別の記事で触れる事にしましょう。

環境構築

まずは環境構築です。
今回pyenvやvirtualenvを一切使わずに構築してみました。
メジャーどころな内容使わずに検証、といったところです。Pythonは色々なパッケージに依存関係がある為、デフォルトのPythonバージョンをアップデートするとひどい目に遭います。ご注意を。
コマンド:
# Python 3.4.0:

wget https://python.org/ftp/python/3.4.0/Python-3.4.0.tar.xz
tar xf Python-3.4.0.tar.xz
cd Python-3.4.0
./configure --prefix=/usr/local --enable-shared LDFLAGS="-Wl,-rpath /usr/local/lib"
make && make altinstall

ミソはmake altinstallだけでしょうか。他はさしあたって特殊なところはありません。
make altinstallするとデフォルトのパッケージを汚染せずにインストールすることができます。
この辺は公式ドキュメントにも書いてあるのでまぁさしあたってどうということはありません。
Python2

mariaDBのインストールもさして問題はないでしょう。
Galera Clusterだと・・・っていう疑問はあるかもしれませんが、ノードの指定さえしなければただのmariaDBです。
気にせずにいきましょう。公式サイトにもかいてありますが、まぁこんな感じでインストールできます。
MariaDB Galera Cluster

yumリポジトリの追加

cat << EOS | sudo tee /etc/yum.repos.d/MariaDB.repo > /dev/null

$EDITOR /etc/yum.repos.d/MariaDB.repo

name = MariaDB
baseurl = http://yum.mariadb.org/5.5/centos6-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

MariaDB Galera Clusterのインストール

yum -y install MariaDB-Galera-server MariaDB-client galera rsync

これが終わってインストールが完了したらコンフィグを書き換えてmariaDBが動作するようにします。
設定はmysqlとそこまで大差ないので割愛します。
dbが起動したらdatabaseを作成してください。

Pyramidのインストール及びセットアップ

上記のような感じでインストールした場合はこんなコマンドになります。

pip3.4 install pyramid

インストールは難なく終わると思いますので、次にプロジェクトを作成します。

pcreate -s alchemy hogehoge

今回はSQLAlchemyを使う為、alchemyを指定していますが、その他のscaffoldsの内容は下記の通り。

pcreate -l

Available scaffolds:
alchemy: Pyramid SQLAlchemy project using url dispatch
starter: Pyramid starter project
zodb: Pyramid ZODB project using traversal

こうするとhogehogeプロジェクトが作成されます。
hogehogeプロジェクトの中にsetup.pyというものがあります。これがrailsなどで言われるbundler的な存在。

python3.4 setup.py develop

このようにすると依存関係のあるものなど必要なモジュールがインストールされます。
追加したいものがあったらこの中に記載する、といった感じです。

このsetup.pyが完了したら一通り動くと思います。
が、今回はmariaDBを利用するのでDB接続内容を変更する必要があります。
mariaDBを利用する場合だとしてもmysqlのコネクターがそのまま利用可能です。
素敵ですね。
どのタイミングだったか忘れましたが、コネクターはmysql-connector-pythonがよいようです。(公式サイト参照)
mysqlを利用する場合は、mysql-connector-pythonを利用します。

$EDITOR hogehoge/setup.py
# requiresという箇所に下記を追加します。

requires = [
	'mysql-connector-python',
]

追記が終わったら再度下記のコマンド

cd プロジェクトディレクトリ
python3.4 setup.py develop

これでmysql-connector-pythonが利用できるようになります。
この後development.ini、production.iniがあるのでどちらも修正を入れます。(production.iniは本番用なので、開発段階では放置でもいいかも。)

cd プロジェクトディレクトリ
$EDITOR development.ini
# sqliteは使わないので、以下の内容をコメントアウトします。
#sqlalchemy.url = sqlite:///%(here)s/hogehoge.sqlite
# 以下の内容を追記
sqlalchemy.url = mysql+mysqlconnector://userid:password@localhost:ポート番号/db名?charset=utf8&use_unicode=1
sqlalchemy.pool_recycle = 3600

上記の形でmariaDBとの接続が可能になります。

テーブル自動生成スクリプト

作成したdbに対してテーブル自動生成スクリプトを実行します。
下記のコマンドでOKです。

cd プロジェクトディレクトリ
initialize_hogehoge_db development.ini

自動生成スクリプトの実態は、
hogehoge/scripts/initializedb.py
です。
結構長くなったので次回は自動生成スクリプト周りから__init__.py周り、views.py周りを書いてみたいと思います。

 

 

【関連記事】
Pythonプロフェッショナルプログラミング
開発を学ぶにあたって、思うこと。
Mac Book Airのストレージの交換

LINEで送る
Pocket