※MVC別に分類します。
このページではMVCのデータベースに紐づくModelのリファレンスを紹介します。
※例文のコードは、karesansui/db/model/user.pyのプログラムを利用しています。
Karesansuiでは、様々なデータをデータベースに保存しています。ここでは、データベースをModel定義する方法を紹介します。
データベースモデル定義プログラムは、karesansui/db/modelフォルダ になります。
※テーブル別にファイルを分類しています。
Karesansuiでは、オープンソースのSQLAlchemyを利用しています。
SQLAlchemyはPythonで書かれたO/RマッパーでPostgreSQL、MySQL、SQLite、Firebirdなど複数のデータベースをサポート(KaresansuiのサポートデータベースはSQLAlchemyに準拠しています)しています。
詳しくはSQLAlchemyのドキュメントを参照ください
Karesansui からSQLAlchemyを使う場合、以下の3つを用意する必要があります。
def get_user_table(metadata, now):
return sqlalchemy.Table('user', metadata,
sqlalchemy.Column('id', sqlalchemy.Integer,
primary_key=True,
autoincrement=True,
),
sqlalchemy.Column('email', sqlalchemy.String(256),
unique=True,
nullable=False,
),
sqlalchemy.Column('password', sqlalchemy.String(40),
nullable=False,
),
sqlalchemy.Column('salt', sqlalchemy.Unicode(16),
nullable=False,
),
sqlalchemy.Column('nickname', sqlalchemy.Unicode(16),
nullable=False,
),
sqlalchemy.Column('languages', sqlalchemy.Unicode(6),
default=u'ja_JP',
),
sqlalchemy.Column('created', sqlalchemy.DateTime,
default=now,
),
sqlalchemy.Column('modified', sqlalchemy.DateTime,
default=now,
onupdate=now,
),
)
class User(karesansui.db.model.Model):
def __init__(self, email, password, salt, nickname, languages=None):
self.password = password
self.salt = salt
self.email = email
self.nickname = nickname
self.languages = languages
def get_json(self, languages):
ret = {}
ret["id"] = self.id
ret["email"] = self.email
#ret["password"] = self.password
#ret["salt"] = self.salt
ret["nickname"] = self.nickname
ret["languages"] = self.languages
ret["created"] = self.created.strftime(
DEFAULT_LANGS[languages]['DATE_FORMAT'][1])
ret["modified"] = self.modified.strftime(
DEFAULT_LANGS[languages]['DATE_FORMAT'][1])
return ret
def __repr__(self):
return "User<'%s, %s'>" % (
self.email, self.languages)
def reload_mapper(metadata, now):
t_user = get_user_table(metadata, now)
mapper(User, t_user)
* karesansui/db/model/__init__#reload_mappers関数に上記で作成したマッピング関数を追記します。+ import karesansui.db.model.user + karesansui.db.model.user.reload_mapper(metadata, _now)