SQLAlchemyの設定
Pylonsはデータ永続層の仕組みを提供しない。が、OR Mapperの一種であるSQLAlchemyとの相性は良い。(pasterでプロジェクト設置した際に、SQLAlchemyを使うかどうか指定したでしょ→http://d.hatena.ne.jp/masayang/20100219/1266606799)
今回は開発環境なので、SQLAlchemyがデータをしまう仕組みはsqliteを使えば良い。本番ではMySQL、それもShardingしまくったものになるだろうが、今はそこまで考える必要はない。*1
development.ini
sqlalchemy.url = sqlite:///%(here)s/development.db
model/__init__.py
とりあえず、nameの一覧が検索できるようにしてみよう。RDB側ではnameおよびPhoneBookのidだけ持っておけば良い。
from sqlalchemy import schema, types name_table = schema.Table('name', meta.metadata, schema.Column('id', types.Integer, schema.Sequence('name_seq_id', optional = True), primary_key = True), schema.Column('phone_id', types.String, nullable = False), schema.Column('name', types.Unicode(255), nullable = False), ) class Name(object): pass orm.mapper(Name, name_table)
テーブルの生成
$ paster setup-app development.ini Running setup_config() from phonebook.websetup 23:27:57,472 INFO [sqlalchemy.engine.base.Engine.0x...4490] PRAGMA table_info("name") 23:27:57,473 INFO [sqlalchemy.engine.base.Engine.0x...4490] () 23:27:57,477 INFO [sqlalchemy.engine.base.Engine.0x...4490] CREATE TABLE name ( id INTEGER NOT NULL, phone_id VARCHAR NOT NULL, name VARCHAR(255) NOT NULL, PRIMARY KEY (id) ) 23:27:57,477 INFO [sqlalchemy.engine.base.Engine.0x...4490] () 23:27:57,551 INFO [sqlalchemy.engine.base.Engine.0x...4490] COMMIT
→gitコミット先: http://github.com/masayang/pylons-mdb/commit/959957705e2d9cd793f55a8e991486805ad16cce