『Pythonエンジニア養成読本』読書会便り ~基礎やTipsから質疑応答の内容まで~

第4回 入門Webアプリケーション開発

この記事を読むのに必要な時間:およそ 5 分

5-2 データベース開発入門

この節ではWebアプリケーションとは切っても切れないデータベースについて解説しています。

PythonではPEP 249でデータベースとのAPI仕様が定義されています。そのため,さまざまなデータベース(MySQL,PostreSQL,Oracleなど)と接続するためのアダプターが存在します。

アダプターでデータベースに接続して直接SQLを実行することも可能ですが,データベースに特化したO/Rマッパーを使用するのが一般的です。

ここではSQLAlchemyを使用しています。他にはSQLObjectやDjango付属のO/Rマッパーなどがあります。

ここで「書籍ではバージョンは0.9.9だが最新は1.0.8となっているが現状はどんな感じか」という質問がありました。回答としては,出版時に1.0系がリリースされ現在は1.0.8が最新,0.9系はこれからはメンテナンスモードのためこれからは1.0系を使うべき,とありました。また,検証はしていないが,ここで出てくる例は1.0系でもそのまま使用できると思うとのことです。

SQLAlchemyはO/Rマッパーなので,Pythonのオブジェクトを扱っているようにデータベース上の値を取得したり,変更ができます。

データベースのサンプルコード

>>> from sqlalchemy.orm import sessionmaker
>>> Session = sessionmaker(bind=engine)
>>> session = Session() # データベースアクセスするためのセッションを作成
>>> post = Post(title=u'title_1', text=u'This is first text.') # データ追加
>>> session.add(post)
>>> session.commit()
>>> query = session.query(Post)
>>> post = query.get(1) # データを取得
>>> post.text = u"This is updated." # データを更新
>>> session.commit()

かなり高機能なので,いろいろ使ってみながら覚えてほしいとのことです。また,私見だがSQLが好きな人にSQLAlchemyは好かれているという印象があるそうです。面白いですね。

WebフレームワークのPyramidを使う場合はSQLAlchemyを使用することが多いそうです。また,データベースのマイグレーション(テーブルに列を追加したりすること)にはAlembicを使用するのが一般的です。

SQLAlchemyはWebアプリケーションだけではなく単独でも使用できます。バッチ処理などでも使用できるので,ぜひ使ってみてください。

5-3 [サンプル]書籍管理アプリの作成

この節ではここまで説明したBottle(Webフレームワーク)とSQLAlchemy(O/Rマッパー)を組み合わせて,簡単なWebアプリケーションを作成しています。サンプルのWebアプリケーションでは書籍の登録,編集,削除と一覧表示ができるというCRUD(Create/Read/Update/Delete)ができる一般的なものです。

Pythonコードは160行程度でクラスは2つと非常にシンプルな作りです。テンプレートを含めても400行程度しかありません。コード全体はGitHubの下記のURLで公開しているので,必要な人はダウンロードして試すことが可能です。

写真4 アプリケーションが動作している様子

写真4 アプリケーションが動作している様子

このコードを動作させるには,下記のコマンドでパッケージをインストールします。bottle-sqlalchemyは名前のとおりBottleでSQLAlchemyを使用するためのパッケージです。WTFormsフォーム という入力フォームを表示したり,入力された値をチェックする機能を提供するパッケージです。WebフレームワークとしてDjangoを使用する場合は,これらの機能はすべて標準で付属しているので追加でパッケージを導入する必要はありません。

パッケージのインストール

$ pip install bottle==0.12.8
$ pip install sqlalchemy==0.9.9
$ pip install bottle-sqlalchemy==0.4.2
$ pip install WTForms==2.0.2

Webアプリケーションではこのように,サンプルとしてCRUDのアプリケーションを作成することはよくあります。処理の流れとしてはどのようなWebフレームワークを使用しても同様で,例えば新規にデータを登録する場合は以下のような流れになります。

  1. モデルを作成する(どういうデータを管理するのかを定義する)
  2. 入力フォームに入力された値を取り出す
  3. モデルのインスタンスに,入力された値を設定する
  4. 保存したら一覧画面に遷移する

しかし,Webアプリケーションを本格的に作成する場合は,他にも考えることが増えます。例えば以下のような観点が必要となります。

  • セッション管理(カート機能などの実現に必要)
  • セキュリティ対策(XSS,CSRFなど)

Bottleではセッション管理にBeakerを使うのが一般的です。Bottleではこのように,いろんな道具を組み合わせて使えるところがいいところです。

まとめとして,BottleはWebアプリケーションのプロトタイプを作成するときには,さくっと作れるので便利であるという話がありました。例としてPlone Symposium Tokyo 2015で解析結果を可視化するためのWebアプリケーションを,Bottleベースで半日くらいで作成したそうです。このアプリケーションはAirbnbから東京と京都の物件の情報を取得し,価格帯をグラフ表示するというものです。発表の様子は下記レポートからも参照できます。

単純に参照するだけであればBottleは向いており,Webアプリケーション作成の取っ掛かりとしてお勧めとのことです。また,冒頭にも書きましたが,1ファイルで作成されているためフレームワークを作る方法についても勉強になるそうです。

著者プロフィール

鈴木たかのり(すずきたかのり)

一般社団法人PyCon JP,副代表理事,株式会社ビープラウド所属。

部内のサイトを作るためにZope/Ploneと出会い,その後必要にかられてPythonを使い始める。PyCon JPでは2011年1月のPyCon mini JPからスタッフとして活動し,2014年-2016年のPyCon JP座長。他の主な活動は,Pythonボルダリング部(#kabepy)部長,Python mini Hack-a-thon(#pyhack)主催など。

共著書に『Pythonによるあたらしいデータ分析の教科書(2018 翔泳社刊)』『Pythonプロフェッショナルプログラミング 第3版(2018 秀和システム刊)』『Pythonエンジニア ファーストブック(2017 技術評論社刊)』『いちばんやさしいPythonの教本(2017 インプレス刊)』などがある。

最近の楽しみはPython Boot Campの講師で訪れた土地で,現地のクラフトビールを飲むこと。2019年は世界各国のPyConでの発表に挑戦している。趣味は吹奏楽とボルダリングとレゴとペンシルパズル。

Facebook:takanory.net

Twitter:@takanory

Github:takanory