Turbogearsプロジェクトのモデルを作る

前回まででとりあえずプロジェクトは起動できたのですが、ただ単にひな形を起動したというだけでここまでなら猿でもできるところです。ここから先がいよいよプロジェクトを作っていく段階に入りますが、ということはいよいよ私の脳みそもついていけなくなってくるわけです…。しかもこういうときに限って、プレッシャーがかかるトラックバックとかが打ち込まれたりしてしまうのです…orz。

モデルの担当者はSQLObjectですが、SQLObjectにデータをいじってもらうためにはどんなデータベースにするかを最初に決めておかなければならないでしょう。つまりまずはSQLObjectに「これこれこういう感じで、カラムはこうで、データの型はこうで…」といったようなことを教えてあげる必要があるに違いありません(ネットを徘徊してみた結果からの「予想」でしかありませんが)。

しかもそれ以前にデータベースの用意をしておく必要があるじゃないですか。前途多難であります。ということでやらなければならないのは…

  1. データベースのセットアップ
  2. pythonからデータベースに接続するためのモジュールのセットアップ
  3. データベース設定ファイル(dev.cfg)の編集
  4. モデルの編集(model.py)とデータベースの生成

という感じになりましょうか。

1.データベースのセットアップ

SQLObjectがいじることのできるデータベースはいくつかあるようですが、とりあえず有名どころのPostgreSQL、MySQL、SQLiteなんかはフツーに使えるようです。

実は私は今までMySQLしか使った(というか「触った」)ことがないのですが、SQLiteが軽くていいらしいので今回はSQLiteを使おうと思います。サーバ・クライアント型ではなく、データベースもファイル単位で扱うということで、何だかお手軽感がTurbogearsにぴったりな気がします。

とりあえずhttp://www.sqlite.org/download.htmlからsqlite-3_3_6.zipおよびsqlitedll-3_3_6.zipをダウンロードしてインストールしてみることにします。とはいえインストーラがついているわけではなく、アーカイブを解凍するとexeファイルが出てくるので特に困ることもないとは思いますが…。

  1. 「C:\sqlite」というフォルダを作る
  2. sqlite-3_3_6.zipおよびsqlitedll-3_3_6.zipを解凍して出てきたものたち(sqlite.exe, sqlite3.dll, sqlite3.def)をそのフォルダに放り込む
  3. パスを通す(マイコンピュータを右クリック→詳細設定タブをクリック→環境変数ボタンをクリック→システム環境設定の「Path」というやつを選んで編集ボタンをクリック→いろいろ書いてある一番最後に「C:\sqlite;」を追加する)

という感じにしてやりました。

一応確認のためいくつかコマンドなど試してみました。

#hogeというデータベースを生成してデータベースに入る
sqlite3 hoge
#hogeというテーブルをカラムの型を指定して生成
sqlite> create table hoge(id integer,
 name varchar(20),
 primary key (id)
);
#hogeテーブルにデータを挿入
sqlite> insert into hoge(name) values('fuga');
sqlite> insert into hoge(name) values('fugu');
#hogeテーブルに格納されているデータを表示
sqlite> select * from hoge;
1|fuga
2|fugu
#カラムの型を指定せずにhageというテーブルを生成
sqlite> create table hage(id integer primary key, name);
#データベース内にあるテーブルを表示
sqlite> .table
hoge hage
#hogeテーブルを削除
sqlite> drop table hoge;
#ちゃんと無くなってるか確認
sqlite> .table
hage
#データベースから出る
sqlite> .exit

た、たのしい…。

sqlite3 hogeで勝手にデータベース(hogeというファイル)が生成されるのがカッコイイです。データの型を指定しなくてもテーブルが作れてしまう(11行目)とかいうところにPython風味を感じたりもします。

2.データベース接続モジュールのセットアップ

さてさて次はpythonからデータベースに接続するためのモジュールをインストールしないといけません。今回はsqliteを使うので、pysqliteというやつをインストールします

MySQLを使う場合はmysql-python、Postgresqlを使う場合はpsycopg2などをインストールすればいいのでしょうか。いずれもeasy_installでインストールできるようですが、WindowsバイナリのPythonを使っている私の環境ではエラーが出ました。

pysqliteはeasy_installのリポジトリに含まれているので

easy_install pysqlite

で簡単にインストールできます。

pysqliteのサイトにある例を参考にして少し使ってみることにします。

以下のような内容のhoge.pyを作成します。

from pysqlite2 import dbapi2 as sqlite

con = sqlite.connect("hoge")
con.execute("create table hage(id integer primary key, name)")

これを実行すればhogeデータベースにhageテーブルが作成されるはずです。

python hoge.py
sqlite3 hoge
sqlite> .table
hage

た、たのしい…。どうでもいいことでも思い通りに動くと楽しいですね(・∀・)

3.Turbogearsプロジェクトのデータベース設定

さてさてpythonからsqliteを使えるようにセットアップできたので、次はTurbogearsのプロジェクトからsqliteを使うように設定ファイル(dev.cfg)を編集します。dev.cfgには最初からサンプルが記載されているので、こいつをちょこちょこっといじくってやればいいですね。

デフォルトではデータベースの設定は

# If you have sqlite, here's a simple default to get you started
# in development
sqlobject.dburi="sqlite://%(current_dir_uri)s/devdata.sqlite"

と書いてありますが、私は今Windows上で作業しているのでこれをコメントアウトし、

# for Windows users, sqlite URIs look like:
# sqlobject.dburi="sqlite:///drive_letter:/path/to/file"

にならって、

sqlobject.dburi="sqlite:///C:/Documents and Settings/nyusuke/My Documents/Turbogears/JUNKSNACK/devdata.sqlite"

としてやりました(データベースファイルは後でtg-adminコマンドによって自動生成されるので今は存在してなくてもいい)。

4.モデルの編集とデータベースの生成

さてさて次はテーブルを定義してやります。というかその前にプロジェクトの中身をもう少し詰めないといけないですね…。プロジェクトにはどんなデータベースが必要なのかなぁ。

今回のプロジェクトはJUNKSNACKという名前で、ジャンキーなスナック菓子の評価を表示するプロジェクトです。もちろん追加や削除、編集もできるものとします。データとしては、お菓子の名前は絶対必要です。また評価としてはコメントによる評価もいいですが、これ以外にも数字によるランク(5段階の評価)も付けることにしましょう。

ということでデータベースには

  • お菓子の名前(文字列)
  • 5段階評価(整数)
  • 一言コメント(文字列)

を保存しておくことにしましょう。

このテーブルをクラスとして表現してやります(=モデル)。

class snack(SQLObject):
name = StringCol(length=64)
eval = IntCol()
comment = StringCol()

カラムの型はいろいろ使えるようです。詳しくはSQLObject本家のドキュメントに書いてありました。日本語訳はPyJUGのSQLObjectドキュメントにあります。

以上をmodel.pyに追記して完成ヾ(゜∀゜)/

これであとはtg-admin sql createとすればテーブルが生成される…ハズ…。

ポチッとな。

……

………ぅぅううぉぉぉおおおおお!!!

データベースファイル発見。

データベースが生成された

中身を確認してみます。

sqlite3 devdata.sqlite
sqlite> .table
snack
#snackテーブルの構造を確認
sqlite> .schema snack
CREATE TABLE snack (
id INTEGER PRIMARY KEY,
name VARCHAR(64),
eval INT,
comment TEXT
);

できてますねヾ(゜∀゜)/

疲れたので今日はここまで~。

カテゴリ
Turbogears Turbogears
トラックバック用URL:
http://nagosui.org:8080/Nagosui/COREBlog2/edit-projects-model/tbping
コメントを追加

下のフォームに記入してコメントを追加できます。平文テキスト形式。

(必須)
(必須)
(必須)
(Required)
Enter the word

このBlogについて
Plone, Zope, Pythonなどのトピックについてのメモです。
カテゴリ
Plone (98)
Plone Products (23)
COREBlog2 (31)
COREBlog1 (29)
ReadingCOREBlog (7)
Zope (66)
Turbogears (18)
Django (12)
Python (25)
Linux (30)
Nagosui (12)
Design (33)
Misc (48)
moblog (5)
最近のエントリ
浜松ブラスバンド定期演奏会2008 nyusuke 2008年11月24日
Glossy Horizontal Menuを使う nyusuke 2008年11月17日
第3回Python東海終了 nyusuke 2008年11月17日
Universalじゃない件 nyusuke 2008年11月15日
最近のコメント
Re:WebデザイナーのためのDjangoはじめの一歩 nyusuke 2007年06月01日
Re:WebデザイナーのためのDjangoはじめの一歩 pateo 2007年05月31日
Re:東海Python Workshop 01終了 nyusuke 2007年05月31日
Re:東海Python Workshop 01終了 kfuruhata 2007年05月30日