Django Evolution で Model の変更をデータベースに反映させる
投稿日:2008/10/14 05:17:19
久々に ReviewBoard をチェックしてたら、 Django Evolution を使ってることを知りました。んで、この Django Evolution は何をしてくれるものかと調べてみたら、 Model の変更をデータベースに反映させてくれるものってことが分かって早速試してみました。
とりあえず、適当にプロジェクト&アプリ作成。Djangoは、1.0 で動かして欲しいみたいです。
$ django-admin.py startproject djtest
$ cd djtest
$ python manage.py startapp guestbook # なんでもいいけど、 guestbook とかつくる。
$ vim guestbook/models.py # guestbook の Model を書く。
guestbook/models.py はこんな感じ。
from django.db import models
class GuestBook(models.Model):
name = models.CharField(max_length=20)
comment = models.TextField()
posted_date = models.DateTimeField()
class Meta:
pass
def __unicode__(self):
return self.name
Django Evolution をチェックアウトしてプロジェクトディレクトリにコピー、 settings.py を書く。
$ svn checkout http://django-evolution.googlecode.com/svn/trunk/ django-evolution
$ cd django-evolution && cp -r django_evolution /path/to/djtest # プロジェクトディレクトリにコピー
$ vim settings.py # データベースの設定とかしつつ、 INSTALLED_APPS に 'django-evolution' を追加。
settings.py の変更したとこだけ。
DATABASE_ENGINE = 'sqlite3'
DATABASE_NAME = 'djtest'
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django_evolution',
'guestbook',
)
とりあえず、これで一度、 syndb を。
$ python manage.py syncdb
sqlite> .schema guestbook_guestbook してみると、
CREATE TABLE "guestbook_guestbook" (
"id" integer NOT NULL PRIMARY KEY,
"name" varchar(20) NOT NULL,
"comment" text NOT NULL,
"posted_date" datetime NOT NULL
);
guestbook/models.py をちょっと書きかえました。tags と is_public の追加です。リレーションとかするとちょっとめんどそうなので、とりあえずあたりさわりなさそうな感じで。ちなみに必須フィールドは初期値を入れておかないとうまくいきません。この辺のことは次回調べてみようかと。
from django.db import models
class GuestBook(models.Model):
name = models.CharField(max_length=20)
tags = models.CommaSeparatedIntegerField(max_length=255, blank=True)
comment = models.TextField()
is_public = models.BooleanField(default=True)
posted_date = models.DateTimeField()
class Meta:
pass
def __unicode__(self):
return self.name
ちなみに現在、以下のようなデータを入れてあります。
sqlite> select * from guestbook_guestbook;
test|2008-10-13 14:46:31.744999|1|hfunai
これで、
$ python manage.py evolve --hint --execute
yes と答えると、データベースに反映されます。以下のようにデータは無事に残っています。まあこれくらい簡単なのならね…
sqlite> select * from guestbook_guestbook;
test|2008-10-13 14:46:31.744999|1|hfunai||1
とりあえず、面白そうなのでいろいろと試してみますかね。
個人的に、 Django で開発するときは、いきなり Model にかきまくって、どんどん変更していくような開発をしているので、大変便利なのではないかと思ってます。というか使います。
- Posted at:
- 2008/10/14 05:17:19
- 1 Comment
- 1 TrackBack
- Tags:
- Django
- Trackback:
- http://blog.monospace.jp/2008/10/14/django_evolution/trackback/
TrackBacks
Django Evolution で Model の変更をデータベースに反映させる その2 - monospace blog
Stored evolutions
もうちょっとマニュアルを読んだので、 前回 の続きを書いてみます。前回は、
$ python manage.py evolve --hint --execute
で、実行しましたが、一旦ファイルに保存してから行う、 Stored evolutions という方法も試してみます。モデルを作って、変更するところまでは、まったく同じです。最初の syncdb を行
- Created at:
- 2008/10/15 04:31:35
Comments
Cole Jones
ほら、ベルルスコーニに対するイタリアのデモ集会