Model その1
かなり間があいてしまいました。ようやくですが、Modelのことをざっくり書いていきます。
Modelってなに?
Djangoが用意しているModelは、データ永続層にアクセスするコンポーネントです。要は、O/Rマッパーでクラスとテーブルが1対1でマッピングされ、1インスタンスが1レコードを表すアクティブレコードのPython版です。
これを使うと(基本的には)SQLレスで、データベースへのアクセスが可能になります。
Modelクラスを書く
Modelクラスを実際に定義してみます。Modelクラスは django.db.models.Modelのクラスを継承して定義します。
ちなみに Modelクラスを定義するときはアプリケーションディレクトリ内のmodels.pyに定義していきます。ファイルを分割したい時は、models.pyの中でModelクラスが定義されたファイルを importします。
(他に良い方法があったら、誰か教えて!!)
from django.db import models class Parson(models.Model): name = models.TextField(db_column='name', null=False, blank=False, default='nanashi-san') address = models.TextField(db_column='address', null=False, blank=False, default='nanashi-san')
こんな感じです。django.db.modelsパッケージにはModelクラスを定義するのに必要な基底クラスやフィールドが入っています。Djangoのリファレンスを見ながら定義するのが確実だと思います。
利用するデータベースを設定する
Modelクラスの定義が終わったら、次は接続先データベースの設定を行います。久々に settings.py を変更します。
DATABASE_ENGINE = 'postgresql_psycopg2' DATABASE_NAME = 'hatena-sample' DATABASE_USER = 'postgres' DATABASE_PASSWORD = 'password DATABASE_HOST = 'localhost' DATABASE_PORT = '5432'
自分の環境では、PostgreSQLが入っていたので、こんな設定になっています。DB接続部分は、psycopg2を使っています。Python/Djangoとは別パッケージなので、easy_install などでインストールしてください。
それとデータベースをつくるのも忘れずに。
テーブルを作る
テーブルを作るときは DDL を作る必要はありません。manage.pyのサブコマンドを利用します。
python manage.py syncdb
ちゃんと接続先が合っていれば、これだけでテーブルを作ってくれるはずです。
ちなみに syncdbコマンドですが、CREATE TABLE文を発行してくれますが、DROP TABLE文は発行してくれません。Modelにフィールドを追加したときは、自分でテーブルを削除する必要があります。面倒だと思ったときは、プラグインを使いましょう。
Modelクラスを使ってデータ登録する
今回は django の shell からデータ登録をします。
python manage.py shell
シェルを起動したら、次のように打ち込みます。
from app1 import models parson = models.Parson() parson.name = 'new-name' parson.address = 'new-address' parson.save()
これでデータが1件登録完了。データベースに直接SQLを発行して登録したデータを確認してみると
hatena-sample=# select * from app1_parson; id | name | address ----+----------+------------- 1 | new-name | new-address (1 行)
登録されてる!
と、こんな感じでデータ登録は非常に簡単です。