モデルの構築
まず最初にTurbogearsが利用するデータベースカスタマイズをします。もし、データベースを利用しないならば次のセクションに行きます。
"dev.cfg"を開いてあなたが使うデータベースの適切なコメントラインの場所を探します。
このチュートリアルではSQLiteを利用します。理由はサーバコネクトの代わりにローカルファイルを利用するので操作が容易だからです。
sqlobject.dburi = "sqlite:///home/brian/tutorial/tutorial.sqlite"
Note SQLiteを利用する場合はURIは絶対パスである必要があります。もちろんSQLiteがインストールされている必要もあります。
"dev.cfg"を閉じます。チュートリアルの終わりまで、これを変更することはないです。
データベーステーブルを定義します。既にある tutorial/model.py のファイルを開きます。
TurboGearsはデータベースの抽出にSQLObjectを利用します。SQLObjectの中では、クラスはテーブルをあらわし、クラスのアトリビュートはテーブルの列をあらわします。
To-Doリスト アプリケーションを作成するわけですから、tutorial/model.pyに次のようなクラスを加えます。
class User(SQLObject): email = StringCol(alternateID=True) lists = MultipleJoin('List') class List(SQLObject): title = UnicodeCol(notNone=True) user = ForeignKey('User') items = MultipleJoin('Item') class Item(SQLObject): value = UnicodeCol(notNone=True) list = ForeignKey('List')
このモデル内では、ユーザはユニークなE-mailアドレスと複数のリストを持つことができる。リストは表題を持ち、一つのオーナーと複数のアイテムを持つ。アイテムは値とそれらを含むリストです。
テーブルの定義と利用のために、SQLObjectのドキュメンテーションを参照します。
http://sqlobject.org/SQLObject.html
dev.cfg内にTurboGearsがデータベースで使う新しいテーブル定義の情報があります。
テーブルの作成には次を実行します。
$ tg-admin sql create
エラーが出なければテーブル作成は成功です。
テーブル定義に変更が必要な場合、現在のデータベースのものを捨てます。そして、テーブルを再作成します。*1
$ tg-admin sql drop <--- DB削除 $ tg-admin sql create <---DB作成
テーブルを作り終えた後、プロジェクトにあるPython Shellでインタラクティブに行の追加をテストします。
Shellをスタートさせます。
$ tg-admin shell
トランザクション内でデータを追加か修正をします。コミットなしでシェルを抜けるとデータベースには保存されません。
トランザクションのコミットには、データを変更後、シェルで次のようにタイプします。
>>> hub.commit() インタラクティブなシェルを使ってテーブルをテストします。順序に従ってデータベースにいくつかのアイテムをinsertをします >>> u1 = User(email="exogen@gmail.com") >>> u1.email 'exogen@gmail.com' >>> u1.id 1 >>> u1.lists [] >>> l1 = List(title="Groceries", user=u1) >>> l1.title u'Groceries' >>> l1.user <User 1 email='exogen@gmail.com'> >>> l1.user.email 'exogen@gmail.com' >>> l1.items [] >>> u1.lists [<List 1 title=u'Groceries' userID=1>] >>> i1 = Item(list=l1, value="Milk") >>> i2 = Item(list=l1, value="Eggs") >>> i3 = Item(list=l1, value="Bread") >>> [item.value for item in l1.items] [u'Milk', u'Eggs', u'Bread'] >>> len(l1.items) 3 セーブするためにコミットすることを忘れないでください。 >>> hub.commit()
テーブルが十分に動いたなら、model.pyを閉じてください。
今後、チュートリアルの終わりまで変更する必要はないです。