天天看點

Django中models的編寫

models的編寫

  • models中的每個class都稱之為模型類(Model) 或 實體類(Entry)
  • models中的每個實體類,必須繼承自models.Model
1、通過ORM建立資料表
  • 1、在models 檔案中定義一個類,如下
from django.db import models

# Create your models here.
class Publisher(models.Model):
    name = models.CharField(max_length=20)
    address = models.CharField(max_length=50)
    city = models.CharField(max_length=20)
    country = models.CharField(max_length=20)
    website = models.URLField()
           
  • 2、在指令提示符中輸入python manage.py makemigrations,此時在對應應用的migrations檔案夾中出現一個0001_initial檔案
# Generated by Django 2.1.8 on 2019-05-07 08:06

from django.db import migrations, models


class Migration(migrations.Migration):

    initial = True

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='Publisher',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=20)),
                ('address', models.CharField(max_length=50)),
                ('city', models.CharField(max_length=20)),
                ('country', models.CharField(max_length=20)),
                ('website', models.URLField()),
            ],
        ),
    ]

           
  • 3、再在指令提示符中執行python manage.py migrate,此時資料庫自動建立一個表
    Django中models的編寫
    注意:Django中的 CharField 資料字段對應SQL中的 varchar 類型的資料
2、Django提供的資料字段以及字段選項
  • 1、常用資料字段(Field Types)
    • BooleanField() 布爾類型
    • CharField() 字元串類型
    • DateField() 日期類型
    • DateTimeField() 日期時間類型
    • FloatField() 浮點數類型
    • FileField() 字元串類型-檔案位址
    • EmailField() 字元串類型
    • IntegerField() 整數類型
    • ImageField() 字元串類型- 圖檔位址
    • URLField() 字元串類型-網址
    • TextField() 字元串類型
    • DecimalField() 浮點數類型
  • 2、常用資料選項(Field Options)
    • null :是否為空name = CharField(max_length=30, null=True),允許為空
    • default:設定預設值name = CharField(max_length=30, default=“保密”)設定預設值為保密
class Author(models.Model):
    name = models.CharField(max_length=20)  # varchar(20)
    age = models.IntegerField()   # int
    email = models.EmailField(null=True)  # varchar(254)允許為空


class Book(models.Model):
    title = models.CharField(max_length=30)    # varchar(30)
    publication_date = models.DateField(default=datetime.datetime.now())  # date 
           

參考文檔(字段類型與字段選項)

3、資料版本的切換
  • python manage.py migrate 應用名稱 版本号
  • 例如:python manage.py migrate music 0002,重新執行0002的日志檔案
    Django中models的編寫
4、資料的導出
  • mysqldump -u root -p 資料庫名 > 檔案名.sqi(導出所有的表結構和資料)
  • mysqldump -u root -p -d 資料庫名 > 檔案名.sql(導出表結構,不導資料)
5、資料的導入
  • mysql -u root -p 資料名 < 檔案名.sql (資料庫名必須先存在)
6、通過資料庫自動導出models檔案
  • python manage.py inspectdb > 檔案名.py