python djangoでデータベースとモデルの使い方

チャンネル名:朝飯コード
◆概要(引用)
djangoでは初期でsqliteのパッケージがインストールされます。sqliteはポータブルのデータベースマネジメントシステムで、MySQLやPostgresのようにデータベースの管理プログラムをインストールする必要がないので、開発の際にはとても楽に扱えます。

ただし、実際にアプリを公開する段階では、セキュリティの面から、上記に挙げたようなMySQLやPostgresのデータベースと使うことをお勧めします。

データベースのタイプを設定
setting.pyを開いてみましょう。

DATABASES = {
‘default’: {
‘ENGINE’: ‘django.db.backends.sqlite3’,
‘NAME’: os.path.join(BASE_DIR, ‘db.sqlite3’),
}
}
ここに記載されているように、デフォルトでsqlite3が使用されています。

データベースにアプリの変更を反映させる。
djangoのアプリを起動してみましょう。

python manage.py runserver
ここでYou have 17 unapplied migration(s)という表示がありますね。これはdjangoのアプリでデータベースに反映されていないデータがあるということです。では下のコードでデータベースを最新のものにしましょう。

python manage.py migrate
これで、ユーザー情報などのデータのテーブルをデータベースに作成します。

次に、PgAdminやMySQLのWorkBench等のGUIツールがないのでデータベースの中身がどうなっているのか見ることができません。

ここで、スーパーユーザーを作成して、データベースの中身を見てみましょう。

python manage.py createsuperuser
名前、Eメール、パスワードの入力をします。

ではrunserverのコマンドでアドミンのページを見てみましょう。

URLはhttp://127.0.0.1:8000/adminです。

ここで、すべてのデータベースのテーブルが表示されるようになります。

またユーザーの作成や管理もここで行えます。ワードプレスのダッシュボードのようなものですね。

試しに新しいユーザーを作ってみましょう。

models.pyの使い方
ここでpythonのクラスを作成し、それがデータベースのテーブルと同じ役目をすることになります。これがあるおかげで、クエリの言語をべんきょうして、SQLからデータベースをいちいち作る手間が省けました。素晴らしい!

これからpythonのクラスを作成してそれらが、データベースのテーブルとして作成されます。

#models.py
class Car(models.Model):
car_name = models.CharField(max_length=200, null=True)
year = models.IntegerField(max_length=4, null=True)
price = models.IntegerField(max_length=20, null=True)
date_created = models.DateTimeField(auto_now_add=True, null=True)
新しいモデルを作成したら、データベースにテーブルを作る準備をします。

python manage.py makemigrations
python manage.py migrate
migrationのフォルダーの中に新しいファイルがありますね。これを今度はデータベースに反映させました。

データベースのテーブルをアドミンに登録する
アプリの中(アドミンではないです)のadmin.pyを開き作ったテーブルを登録しましょう。

from .models import Car
admini.site.register(Car)
ではdjangoのアドミンからテーブルが反映されたことを確認してみましょう。

ここで、テーブルに追加したデータがかobjectとして表示されていますね。これを解消するために、__str__を返してあげます。

#models.py
class Car(models.Model):
BRAND = (
(‘トヨタ’, ‘トヨタ’),
(‘スバル’, ‘スバル’),
)
brand = models.CharField(max_length=200, null=True, choices=BRAND)
car_model = models.CharField(max_length=200, null=True)
year = models.IntegerField(null=True)
price = models.IntegerField(null=True)
date_created = models.DateTimeField(auto_now_add=True, null=True)
def __str__(self):
return self.name
djangoは自動でそれぞれのアイテムにIDをつけてくれます。これは全く同じタイプのデータがある場合に見分けをつける為です。

これからリレーショナルのデータベースを作成するにあたり、二つテーブルを作ってみましょう。

class Customer(models.Model):
customer_name = models.CharField(max_length=200, null=True)
address = models.CharField(max_length=200, null=True)
phone =models.CharField(max_length=200, null=True)
date_created = models.DateTimeField(auto_now_add=True, null=True)
class Order(models.Model):
STATUS = (
(‘検討中’, ‘検討中’),
(‘購入済み’, ‘購入済み’)
       (‘修理中’, ‘修理中’)    
)
#customer_name =
#car_model =
date_created = models.DateTimeField(auto_now_add=True, null=True)
status = models.CharField(max_length=200, null=True, choices=STATUS)
では、同じようにmakemigrationsとmigrateのコマンドを繰り返し、下のようにアプリのadmin.pyに作ったテーブルを登録しましょう。

from .models import *
admin.site.register(Car)
admin.site.register(Customer)
admin.site.register(Order)

コメント

タイトルとURLをコピーしました