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

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

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

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

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'test', # 數(shù)據(jù)庫名稱悔据,如果使用sqlite3,則輸入數(shù)據(jù)庫文件路徑较店,如'/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中注冊你的app

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

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

python manage.py check

5.通過model類定義來創(chuàng)建數(shù)據(jù)庫表

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

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

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

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

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

例如:

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

home應(yīng)用的0002實(shí)例揪阶,對應(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ù)庫中生成home_Article表格,也就是對應(yīng)home應(yīng)用的Article模塊于微。

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

python manage.py sqlmigrate home 0001
image.png

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

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

(1)利用shell

python manage.py sqlshell

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

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í)近平訪問美國','習(xí)近平訪問美國詳情'),('96臺海危機(jī)','96臺海危機(jī)詳情')]
    for d in data:
        p = Article(title=d[0],content=d[1])
        p.save()
initdata()

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

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

def initdata():
    data = [('春節(jié)放假通知','春節(jié)放假通知內(nèi)容'),('習(xí)近平訪問美國','習(xí)近平訪問美國詳情'),('96臺海危機(jī)','96臺海危機(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í)近平訪問美國','習(xí)近平訪問美國詳情'),('96臺海危機(jī)','96臺海危機(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)系的定義吗坚。如果沒有祈远,會出現(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)容合作請聯(lián)系作者
  • 序言:七十年代末车份,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子牡彻,更是在濱河造成了極大的恐慌扫沼,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件庄吼,死亡現(xiàn)場離奇詭異缎除,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)总寻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進(jìn)店門器罐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人渐行,你說我怎么就攤上這事轰坊≈” “怎么了?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵肴沫,是天一觀的道長粟害。 經(jīng)常有香客問我,道長颤芬,這世上最難降的妖魔是什么悲幅? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮站蝠,結(jié)果婚禮上汰具,老公的妹妹穿的比我還像新娘。我一直安慰自己沉衣,他們只是感情好郁副,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著豌习,像睡著了一般。 火紅的嫁衣襯著肌膚如雪拔疚。 梳的紋絲不亂的頭發(fā)上肥隆,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天,我揣著相機(jī)與錄音稚失,去河邊找鬼栋艳。 笑死,一個(gè)胖子當(dāng)著我的面吹牛句各,可吹牛的內(nèi)容都是我干的吸占。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼凿宾,長吁一口氣:“原來是場噩夢啊……” “哼矾屯!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起初厚,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤件蚕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后产禾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體排作,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年亚情,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了妄痪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,001評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡楞件,死狀恐怖衫生,靈堂內(nèi)的尸體忽然破棺而出僧著,到底是詐尸還是另有隱情,我是刑警寧澤障簿,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布盹愚,位于F島的核電站,受9級特大地震影響站故,放射性物質(zhì)發(fā)生泄漏皆怕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一西篓、第九天 我趴在偏房一處隱蔽的房頂上張望愈腾。 院中可真熱鬧,春花似錦岂津、人聲如沸虱黄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽橱乱。三九已至,卻和暖如春粱甫,著一層夾襖步出監(jiān)牢的瞬間泳叠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工茶宵, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留危纫,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓乌庶,卻偏偏與公主長得像种蝶,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子瞒大,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評論 2 355