Django教程03-設(shè)計(jì)Models(使用數(shù)據(jù)庫(kù))

上一篇:Django教程02-使用模板templates
下一篇:Django教程04-Models的常用操作

1.數(shù)據(jù)庫(kù)的注冊(cè)

首先要在settings.py文件進(jìn)行數(shù)據(jù)庫(kù)的設(shè)定

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'test', # 數(shù)據(jù)庫(kù)名稱,如果使用sqlite3,則輸入數(shù)據(jù)庫(kù)文件路徑,如'/home/django/mydata.
        'USER': 'root', # Not used with sqlite3.
        'PASSWORD': 'admin', # Not used with sqlite3.
        'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '', # Set to empty string for default. Not used with sqlite3.
    }
}

默認(rèn)情況的設(shè)置如下

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

2.在app的models.py文件中創(chuàng)建model子類

from django.db import models

# Create your models here.

class Article(models.Model):
    title = models.CharField(max_length=30)
    content = models.CharField(max_length=500)
    def __str__(self):
        return self.title

3.然后在settings.py中注冊(cè)你的app

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'home',#這個(gè)是自己要注冊(cè)的app
]

4.驗(yàn)證你的model設(shè)置

python manage.py check

5.通過(guò)model類定義來(lái)創(chuàng)建數(shù)據(jù)庫(kù)表

1)python manage.py的相關(guān)命令

  • migrate: 用于執(zhí)行遷移動(dòng)作
  • makemigrations: 基于當(dāng)前的model創(chuàng)建新的遷移策略文件
  • sqlmigrate: 顯示遷移的SQL語(yǔ)句

參考:Django 1.7 新數(shù)據(jù)遷移工具 (migrations) 的使用# Django 1.7 新數(shù)據(jù)遷移工具 (migrations) 的使用

2)針對(duì)具體應(yīng)用

上述的三個(gè)命令,都可以指定具體的app和實(shí)例

例如:

python manage.py migrate home  # 針對(duì)home應(yīng)用進(jìn)行遷移
python manage.py migrate home 0002 #針對(duì)home應(yīng)用的0002實(shí)例

home應(yīng)用的0002實(shí)例,對(duì)應(yīng)home文件夾——migrations文件夾下,0002_****.py

3)創(chuàng)建表格

首先,產(chǎn)生home應(yīng)用的migration文件

python3 manage.py makemigrations home
image.png

執(zhí)行該命令后,在home應(yīng)用的文件夾下,生成migrations文件夾,并生成第一個(gè)遷移實(shí)例0001_initial.py

然后,執(zhí)行遷移命令

python3 manage.py migrate home
image.png

執(zhí)行0001_initial.py,執(zhí)行后,數(shù)據(jù)庫(kù)中生成home_Article表格,也就是對(duì)應(yīng)home應(yīng)用的Article模塊。

顯示sql相關(guān)操作

python manage.py sqlmigrate home 0001
image.png

6.初始化表格數(shù)據(jù)

有兩種方式可以實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)表格的初始化

(1)利用shell

python manage.py sqlshell

進(jìn)入sql數(shù)據(jù)庫(kù)的命令行管理模式。

image.png
from home.models import Article

從home應(yīng)用的models.py中導(dǎo)入剛定義的Article子模型,后續(xù)即可進(jìn)行相關(guān)賦值操作

def initdata():
    data = [('春節(jié)放假通知','春節(jié)放假通知內(nèi)容'),('習(xí)近平訪問(wèn)美國(guó)','習(xí)近平訪問(wèn)美國(guó)詳情'),('96臺(tái)海危機(jī)','96臺(tái)海危機(jī)詳情')]
    for d in data:
        p = Article(title=d[0],content=d[1])
        p.save()
initdata()

可以把這一過(guò)程放在一個(gè)文件中實(shí)現(xiàn):
initdb.py

from mysite.wsgi import *  #需要通過(guò)這個(gè),導(dǎo)入Django的一些初始設(shè)置,否則會(huì)失敗
from home.models import Article

def initdata():
    data = [('春節(jié)放假通知','春節(jié)放假通知內(nèi)容'),('習(xí)近平訪問(wèn)美國(guó)','習(xí)近平訪問(wèn)美國(guó)詳情'),('96臺(tái)海危機(jī)','96臺(tái)海危機(jī)詳情')]
    for d in data:
        p = Article(title=d[0],content=d[1])
        p.save()

if __name__=='__main__':
    initdata()

把該文件命名為initdb.py,放在項(xiàng)目根目錄中,然后python initdb.py執(zhí)行。

(2)利用migration

在應(yīng)用的migrations文件夾中,新建文件0002_initialdata.py

# -*- coding: utf-8 -*-
# Generated by Django 1.11.3 on 2017-07-02 02:59
from __future__ import unicode_literals

from django.db import migrations, models

def initdata(apps, schema_editor):
    Article = apps.get_model("home", "Article")
    data = [('春節(jié)放假通知','春節(jié)放假通知內(nèi)容'),('習(xí)近平訪問(wèn)美國(guó)','習(xí)近平訪問(wèn)美國(guó)詳情'),('96臺(tái)海危機(jī)','96臺(tái)海危機(jī)詳情')]
    for d in data:
        p = Article(title=d[0],content=d[1])
        p.save()

class Migration(migrations.Migration):


    dependencies = [
    ('home', '0001_initial'), #依賴關(guān)系的定義。如果沒(méi)有,會(huì)出現(xiàn)沖突。
    ]

    operations = [
        migrations.RunPython(initdata),
    ]

執(zhí)行遷移命令:

python manage.py migrate home 0002
image.png

執(zhí)行完成后,數(shù)據(jù)表結(jié)果如下:


image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容