Python 入門

ホーム > Django による Web 開発 > モデル (Model) の基礎

モデル (Model) の基礎

ここでは MySQL をバックエンドのデータベースとして、モデルを定義する方法を示します。 MySQL の設定を行っていない人は、先に MySQL の設定をしてください。

Django app の作成

Django プロジェクトを作成したら、その中に Django app を作成できます。Django app を作成するには、 次のようにします。(この例では meibo という名前の Django app を作成しています)

>python manage.py startapp meibo

すると meibo というサブディレクトリができて、その中に次の四つのファイルが作成されます。

  • __init__.py
  • models.py
  • tests.py
  • views.py

Model の定義

ここでは会社 (Company) と従業員 (Employee) というクラスを定義します。 models.py を次のように編集します。

from django.db import models

class Company(models.Model):
     name = models.CharField(max_length = 100)
     website = models.URLField()
     
     def __unicode__(self):
         return self.name

class Employee(models.Model):
     firstname = models.CharField(max_length = 100)
     lastname = models.CharField(max_length = 100)
     email = models.EmailField()
     company = models.ForeignKey(Company)
     
     def __unicode__(self):
         return self.firstname

データベースとの同期

ここでは上で作成した Django app - meibo のみについて処理を行うので、 settings.py の中の INSTALLED_APPS と MIDDLEWARE_CLASSES を次のように編集します。

MIDDLEWARE_CLASSES = (
)

INSTALLED_APPS = (
     'mysite.meibo',
)

ここで、mysite という Django プロジェクト内に meibo を作ったことに注意してください。 プロジェクト名にあわせて、mysite の部分は変更してください。

次のコマンドでエラーが出ないことを確認し...

>python manage.py validate
0 errors found

次のコマンドでこのモデルに対するスキーマを出力できます。

>python manage.py sqlall meibo
BEGIN;CREATE TABLE `meibo_company` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `name` varchar(100) NOT NULL,
    `website` varchar(200) NOT NULL
)
;
CREATE TABLE `meibo_employee` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `firstname` varchar(100) NOT NULL,
    `lastname` varchar(100) NOT NULL,
    `email` varchar(75) NOT NULL,
    `company_id` integer NOT NULL
)
;
ALTER TABLE `meibo_employee` ADD CONSTRAINT `company_id_refs_id_517389d7` 
FOREIGN KEY (`company_id`) REFERENCES `meibo_company` (`id`);
CREATE INDEX `meibo_employee_543518c6` ON `meibo_employee` (`company_id`);COMMIT;

この SQL 文を実行してもよいですが、次のコマンドでデータベースとの同期を取ることも可能です。

>python manage.py syncdb
Creating table meibo_company
Creating table meibo_employee
Installing index for meibo.Employee model
No fixtures found.

MySQL にテーブルが作成された

動作確認

Python コードからここで定義したモデルを利用できるか確認できます。 次のように manage.pyshell を利用します。

>python manage.py shell
Python 2.7.1 (r271:86832, Nov 27 2010, 18:30:46) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from meibo.models import Company
>>> c = Company(name='ABC Company', website='http://python.keicode.com/')
>>> c.save()
>>> c = Company(name='XYZ Company', website='http://foo.keicode.com/')
>>> c.save()
>>> Company.objects.all()
[<Company: ABC Company>, <Company: XYZ Company>]

上のようにしてデータベース側を確認すると、確かにレコードが作成されることがわかります。

Company テーブルにレコードができている

データアクセス(取得、更新など)について、さらにいろいろな操作が可能です。

ホーム > Django による Web 開発 > モデル (Model) の基礎