成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

怎么使用python和Django完成博客數(shù)據(jù)庫(kù)的遷移-創(chuàng)新互聯(lián)

這篇文章主要介紹怎么使用python和Django完成博客數(shù)據(jù)庫(kù)的遷移,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

成都創(chuàng)新互聯(lián)公司專注于新余企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站開(kāi)發(fā),商城系統(tǒng)網(wǎng)站開(kāi)發(fā)。新余網(wǎng)站建設(shè)公司,為新余等地區(qū)提供建站服務(wù)。全流程按需制作網(wǎng)站,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)

1.設(shè)計(jì)博客數(shù)據(jù)庫(kù)表結(jié)構(gòu)

博客最主要的功能就是展示我們寫(xiě)的文章,它需要從某個(gè)地方獲取博客文章數(shù)據(jù)才能把文章展示出來(lái),通常來(lái)說(shuō)這個(gè)地方就是數(shù)據(jù)庫(kù)。我們把寫(xiě)好的文章永久地保存在數(shù)據(jù)庫(kù)里,當(dāng)用戶訪問(wèn)我們的博客時(shí),Django 就去數(shù)據(jù)庫(kù)里把這些數(shù)據(jù)取出來(lái)展現(xiàn)給用戶。

博客的文章應(yīng)該含有標(biāo)題、正文、作者、發(fā)表時(shí)間等數(shù)據(jù)。一個(gè)更加現(xiàn)代化的博客文章還希望它有分類、標(biāo)簽、評(píng)論等。為了更好地存儲(chǔ)這些數(shù)據(jù),我們需要合理地組織數(shù)據(jù)庫(kù)的表結(jié)構(gòu)。

我們的博客初級(jí)版本主要包含博客文章,文章會(huì)有分類以及標(biāo)簽。一篇文章只能有一個(gè)分類,但可以打上很多標(biāo)簽。

文章 id 標(biāo)題 正文 發(fā)表時(shí)間 分類 標(biāo)簽
1 title 1 text 1 2016-12-23 Django Django 學(xué)習(xí)
2 title 2 text 2 2016-12-24 Django Django 學(xué)習(xí)
3 title 3 text 3 2016-12-26 Python Python 學(xué)習(xí)

其中文章 ID 是一個(gè)數(shù)字,唯一對(duì)應(yīng)著一篇文章。當(dāng)然還可以有更多的列以存儲(chǔ)更多相關(guān)數(shù)據(jù),這只是一個(gè)最基本的示例。

數(shù)據(jù)庫(kù)表設(shè)計(jì)成這樣其實(shí)已經(jīng)可以了,但是稍微分析一下我們就會(huì)發(fā)現(xiàn)一個(gè)問(wèn)題,這 3 篇文章的分類和標(biāo)簽都是相同的,這會(huì)產(chǎn)生很多重復(fù)數(shù)據(jù),當(dāng)數(shù)據(jù)量很大時(shí)就浪費(fèi)了存儲(chǔ)空間。

不同的文章可能它們對(duì)應(yīng)的分類或者標(biāo)簽是相同的,所以我們把分類和標(biāo)簽提取出來(lái),做成單獨(dú)的數(shù)據(jù)庫(kù)表,再把文章和分類、標(biāo)簽關(guān)聯(lián)起來(lái)。下面分別是分類和標(biāo)簽的數(shù)據(jù)庫(kù)表:

分類 id 分類名

1 Django
2 Python

標(biāo)簽 id 標(biāo)簽名

1 Django 學(xué)習(xí)
2 Python 學(xué)習(xí)

接下來(lái)就是編寫(xiě)我們的數(shù)據(jù)庫(kù)模型:

以上是自然語(yǔ)言描述的表格,數(shù)據(jù)庫(kù)也和編程語(yǔ)言一樣,有它自己的一套規(guī)定的語(yǔ)法來(lái)生成上述的表結(jié)構(gòu),這樣我們才能把數(shù)據(jù)存進(jìn)去。一般來(lái)說(shuō)這時(shí)候我們應(yīng)該先去學(xué)習(xí)數(shù)據(jù)庫(kù)創(chuàng)建表格的語(yǔ)法,再回來(lái)寫(xiě)我們的 Django 博客代碼了。但是 Django 告訴我們不用這么麻煩,它已經(jīng)幫我們做了一些事情。Django 把那一套數(shù)據(jù)庫(kù)的語(yǔ)法轉(zhuǎn)換成了 Python 的語(yǔ)法形式,我們只要寫(xiě) Python 代碼就可以了,Django 會(huì)把 Python 代碼翻譯成對(duì)應(yīng)的數(shù)據(jù)庫(kù)操作語(yǔ)言。用更加專業(yè)一點(diǎn)的說(shuō)法,就是 Django 為我們提供了一套 ORM(Object Relational Mapping)系統(tǒng)。

例如我們的分類數(shù)據(jù)庫(kù)表,Django 只要求我們這樣寫(xiě):

blog/models.py
from django.db import models
class Category(models.Model):
 name = models.CharField(max_length=100)

給出完整的代碼:

from django.db import models
from django.contrib.auth.models import User
from django.utils.six import python_2_unicode_compatible

# python_2_unicode_compatible 裝飾器用于兼容 Python2
@python_2_unicode_compatible
class Category(models.Model):
 """
 Django 要求模型必須繼承 models.Model 類。
 Category 只需要一個(gè)簡(jiǎn)單的分類名 name 就可以了。
 CharField 指定了分類名 name 的數(shù)據(jù)類型,CharField 是字符型,
 CharField 的 max_length 參數(shù)指定其大長(zhǎng)度,超過(guò)這個(gè)長(zhǎng)度的分類名就不能被存入數(shù)據(jù)庫(kù)。
 當(dāng)然 Django 還為我們提供了多種其它的數(shù)據(jù)類型,如日期時(shí)間類型 DateTimeField、整數(shù)類型 IntegerField 等等。
 Django 內(nèi)置的全部類型可查看文檔:
 https://docs.djangoproject.com/en/1.10/ref/models/fields/#field-types
 """
 name = models.CharField(max_length=100)
 def __str__(self):
 return self.name

@python_2_unicode_compatible
class Tag(models.Model):
 """
 標(biāo)簽 Tag 也比較簡(jiǎn)單,和 Category 一樣。
 再次強(qiáng)調(diào)一定要繼承 models.Model 類!
 """
 name = models.CharField(max_length=100)
 def __str__(self):
 return self.name

@python_2_unicode_compatible
class Post(models.Model):
 """
 文章的數(shù)據(jù)庫(kù)表稍微復(fù)雜一點(diǎn),主要是涉及的字段更多。
 """
 # 文章標(biāo)題
 title = models.CharField(max_length=70)
 # 文章正文,我們使用了 TextField。
 # 存儲(chǔ)比較短的字符串可以使用 CharField,但對(duì)于文章的正文來(lái)說(shuō)可能會(huì)是一大段文本,因此使用 TextField 來(lái)存儲(chǔ)大段文本。
 body = models.TextField()
 # 這兩個(gè)列分別表示文章的創(chuàng)建時(shí)間和最后一次修改時(shí)間,存儲(chǔ)時(shí)間的字段用 DateTimeField 類型。
 created_time = models.DateTimeField()
 modified_time = models.DateTimeField()
 # 文章摘要,可以沒(méi)有文章摘要,但默認(rèn)情況下 CharField 要求我們必須存入數(shù)據(jù),否則就會(huì)報(bào)錯(cuò)。
 # 指定 CharField 的 blank=True 參數(shù)值后就可以允許空值了。
 excerpt = models.CharField(max_length=200, blank=True)
 # 這是分類與標(biāo)簽,分類與標(biāo)簽的模型我們已經(jīng)定義在上面。
 # 我們?cè)谶@里把文章對(duì)應(yīng)的數(shù)據(jù)庫(kù)表和分類、標(biāo)簽對(duì)應(yīng)的數(shù)據(jù)庫(kù)表關(guān)聯(lián)了起來(lái),但是關(guān)聯(lián)形式稍微有點(diǎn)不同。
 # 我們規(guī)定一篇文章只能對(duì)應(yīng)一個(gè)分類,但是一個(gè)分類下可以有多篇文章,所以我們使用的是 ForeignKey,即一對(duì)多的關(guān)聯(lián)關(guān)系。
 # 而對(duì)于標(biāo)簽來(lái)說(shuō),一篇文章可以有多個(gè)標(biāo)簽,同一個(gè)標(biāo)簽下也可能有多篇文章,所以我們使用 ManyToManyField,表明這是多對(duì)多的關(guān)聯(lián)關(guān)系。
 # 同時(shí)我們規(guī)定文章可以沒(méi)有標(biāo)簽,因此為標(biāo)簽 tags 指定了 blank=True。
 # 如果你對(duì) ForeignKey、ManyToManyField 不了解,請(qǐng)看教程中的解釋,亦可參考官方文檔:
 # https://docs.djangoproject.com/en/1.10/topics/db/models/#relationships
 category = models.ForeignKey(Category)
 tags = models.ManyToManyField(Tag, blank=True)
 # 文章作者,這里 User 是從 django.contrib.auth.models 導(dǎo)入的。
 # django.contrib.auth 是 Django 內(nèi)置的應(yīng)用,專門用于處理網(wǎng)站用戶的注冊(cè)、登錄等流程,User 是 Django 為我們已經(jīng)寫(xiě)好的用戶模型。
 # 這里我們通過(guò) ForeignKey 把文章和 User 關(guān)聯(lián)了起來(lái)。
 # 因?yàn)槲覀円?guī)定一篇文章只能有一個(gè)作者,而一個(gè)作者可能會(huì)寫(xiě)多篇文章,因此這是一對(duì)多的關(guān)聯(lián)關(guān)系,和 Category 類似。
 author = models.ForeignKey(User)
 def __str__(self):
 return self.title

Category 就是一個(gè)標(biāo)準(zhǔn)的 Python 類,它繼承了 models.Model 類,類名為 Category 。Category 類有一個(gè)屬性 name,它是 models.CharField 的一個(gè)實(shí)例。

這樣,Django 就可以把這個(gè)類翻譯成數(shù)據(jù)庫(kù)的操作語(yǔ)言,在數(shù)據(jù)庫(kù)里創(chuàng)建一個(gè)名為 category 的表格,這個(gè)表格的一個(gè)列名為 name。還有一個(gè)列 id,Django 則會(huì)自動(dòng)創(chuàng)建??梢钥闯鰪?Python 代碼翻譯成數(shù)據(jù)庫(kù)語(yǔ)言時(shí)其規(guī)則就是一個(gè) Python 類對(duì)應(yīng)一個(gè)數(shù)據(jù)庫(kù)表格,類名即表名,類的屬性對(duì)應(yīng)著表格的列,屬性名即列名。

我們需要 3 個(gè)表格:文章(Post)、分類(Category)以及標(biāo)簽(Tag),下面就來(lái)分別編寫(xiě)它們對(duì)應(yīng)的 Python 類。模型的代碼通常寫(xiě)在相關(guān)應(yīng)用的 models.py 文件里。

二:遷移數(shù)據(jù)庫(kù)

為了讓 Django 完成翻譯,創(chuàng)建好這些數(shù)據(jù)庫(kù)表,我們?cè)僖淮握?qǐng)出我的工程管理助手 manage.py。激活虛擬環(huán)境,切換到 manage.py 文件所在的目錄下,分別運(yùn)行 python manage.py makemigrations 和 python manage.py migrate 命令:

怎么使用python和Django完成博客數(shù)據(jù)庫(kù)的遷移

注意:如果代碼中含有中文注釋,且你使用的是 Python 2 開(kāi)發(fā)環(huán)境的話,會(huì)得到一個(gè)編碼錯(cuò)誤。因此請(qǐng)?jiān)诤兄形淖⑨尩奈募铋_(kāi)始處加入編碼聲明:# coding: utf-8。

當(dāng)我們執(zhí)行了 python manage.py makemigrations 后,Django 在 blog 應(yīng)用的 migrations\ 目錄下生成了一個(gè) 0001_initial.py 文件,這個(gè)文件是 Django 用來(lái)記錄我們對(duì)模型做了哪些修改的文件。目前來(lái)說(shuō),我們?cè)?models.py 文件里創(chuàng)建了 3 個(gè)模型類,Django 把這些變化記錄在了 0001_initial.py 里。

不過(guò)此時(shí)還只是告訴了 Django 我們做了哪些改變,為了讓 Django 真正地為我們創(chuàng)建數(shù)據(jù)庫(kù)表,接下來(lái)又執(zhí)行了 python manage.py migrate 命令。Django 通過(guò)檢測(cè)應(yīng)用中 migrations\ 目錄下的文件,得知我們對(duì)數(shù)據(jù)庫(kù)做了哪些操作,然后它把這些操作翻譯成數(shù)據(jù)庫(kù)操作語(yǔ)言,從而把這些操作作用于真正的數(shù)據(jù)庫(kù)。

你可以看到命令的輸出除了 Applying blog.0001_initial... OK 外,Django 還對(duì)其它文件做了操作。這是因?yàn)槌宋覀冏约航⒌?blog 應(yīng)用外,Django 自身還內(nèi)置了很多應(yīng)用,這些應(yīng)用本身也是需要存儲(chǔ)數(shù)據(jù)的。可以在 settings.py 的 INSTALLED_APP 設(shè)置里看到這些應(yīng)用,當(dāng)然我們目前不必關(guān)心這些。

blogproject/settings.py
INSTALLED_APPS = [
 'django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'blog',
]

對(duì)于了解數(shù)據(jù)庫(kù)語(yǔ)言的人,你可以運(yùn)行下面的命令看看 Django 究竟為我們做了什么:

python manage.py sqlmigrate blog 0001

你將看到輸出了經(jīng) Django 翻譯后的數(shù)據(jù)庫(kù)表創(chuàng)建語(yǔ)句,這有助于你理解 Django ORM 的工作機(jī)制。

怎么使用python和Django完成博客數(shù)據(jù)庫(kù)的遷移

三:選擇數(shù)據(jù)庫(kù)版本

沒(méi)有安裝任何的數(shù)據(jù)庫(kù)軟件,Django 就幫我們遷移了數(shù)據(jù)庫(kù)。這是因?yàn)槲覀兪褂昧?Python 內(nèi)置的 SQLite3 數(shù)據(jù)庫(kù)。

SQLite3 是一個(gè)十分輕巧的數(shù)據(jù)庫(kù),它僅有一個(gè)文件。你可以看一到項(xiàng)目根目錄下多出了一個(gè) db.sqlite3 的文件,這就是 SQLite3 數(shù)據(jù)庫(kù)文件,Django 博客的數(shù)據(jù)都會(huì)保存在這個(gè)數(shù)據(jù)庫(kù)文件里。

Django 在 settings.py 里為我們做了一些默認(rèn)的數(shù)據(jù)庫(kù)配置:

blogproject/settings.py
## 其它配置選項(xiàng)...
DATABASES = {
 'default': {
 'ENGINE': 'django.db.backends.sqlite3',
 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
 }
}
## 其它配置選項(xiàng)...

可以看到默認(rèn)的數(shù)據(jù)庫(kù)引擎就是使用的 SQLite3。

當(dāng)然一些人傾向于使用 MySQL 等大型數(shù)據(jù)庫(kù),至于 Django 如何配置 MySQL 這里就不贅述了,你可以自行使用搜索引擎或者查閱 Django 的官方文檔解決。對(duì)于一個(gè)小型博客而言,SQLite3 數(shù)據(jù)庫(kù)足以勝任。

四:用Django方式操作數(shù)據(jù)庫(kù)

數(shù)據(jù)庫(kù)最主要的操作就是往里面存入數(shù)據(jù)、從中取出數(shù)據(jù)、修改已保存的數(shù)據(jù)和刪除不再需要的數(shù)據(jù)。和創(chuàng)建數(shù)據(jù)庫(kù)表一樣,Django 為這些操作提供了一整套方法,從而把我們從數(shù)據(jù)庫(kù)語(yǔ)言中解放出來(lái)。我們不用學(xué)習(xí)如何利用數(shù)據(jù)庫(kù)語(yǔ)言去完成這些操作,只要簡(jiǎn)單地調(diào)用幾個(gè) Python 函數(shù)就可以滿足我們的需求。

存數(shù)據(jù)

先在命令行中來(lái)探索一下這些函數(shù),感受一下如何用 Django 的方式來(lái)操作數(shù)據(jù)庫(kù)。在 manage.py 所在目錄下運(yùn)行 python manage.py shell 命令:

創(chuàng)建一個(gè)分類和一個(gè)標(biāo)簽:

怎么使用python和Django完成博客數(shù)據(jù)庫(kù)的遷移

首先導(dǎo)入 3 個(gè)之前寫(xiě)好的模型類,然后實(shí)例化了一個(gè) Category 類和一個(gè) Tag 類,為他們的屬性 name 賦了值。為了讓 Django 把這些數(shù)據(jù)保存進(jìn)數(shù)據(jù)庫(kù),調(diào)用實(shí)例的 save 方法即可。

再創(chuàng)建一篇文章試試,但創(chuàng)建文章之前,我們需要先創(chuàng)建一個(gè) User,用于指定文章的作者。創(chuàng)建 User 的命令 Django 已經(jīng)幫我們寫(xiě)好了,依然是通過(guò) manage.py 來(lái)運(yùn)行。首先按住 Ctrl + c 退出命令交互欄(一次退不出就連續(xù)多按幾次),運(yùn)行 python manage.py createsuperuser 命令并根據(jù)提示創(chuàng)建用戶:

怎么使用python和Django完成博客數(shù)據(jù)庫(kù)的遷移

(密碼過(guò)于簡(jiǎn)單會(huì)通不過(guò))

再次運(yùn)行 python manage.py shell 進(jìn)入 Python 命令交互欄,開(kāi)始創(chuàng)建文章:

怎么使用python和Django完成博客數(shù)據(jù)庫(kù)的遷移

由于我們重啟了 shell,因此需要重新導(dǎo)入了 Category、Tag、Post 以及 User。我們還導(dǎo)入了一個(gè) Django 提供的輔助模塊 timezone,這是因?yàn)槲覀冃枰{(diào)用它的 now() 方法為 created_timemodified_time 指定時(shí)間,容易理解 now 方法返回當(dāng)前時(shí)間。然后我們根據(jù)用戶名和分類名,通過(guò) get 方法取出了存在數(shù)據(jù)庫(kù)中的 UserCategory(取數(shù)據(jù)的方法將在下面介紹)。接著我們?yōu)槲恼轮付?titlebody 、created_timemodified_time值,并把它和前面創(chuàng)建的 Category 以及 User 關(guān)聯(lián)了起來(lái)。允許為空 excerpt、tags 我們就沒(méi)有為它們指定值了。

注意:我們這里使用 get 方法根據(jù) Categoryname 屬性的值獲取分類的一條記錄。Category.objects.get(name='category test') 的含義是從數(shù)據(jù)庫(kù)中取出 name 的值為 category test 的分類記錄。確保數(shù)據(jù)庫(kù)中只有一條值為 category test 的記錄,否則 get 方法將返回一個(gè) MultipleObjectsReturned 異常。如果你不小心已經(jīng)存了多條記錄,請(qǐng)刪掉多余的記錄。如何刪除數(shù)據(jù)請(qǐng)看下文。

取數(shù)據(jù)

數(shù)據(jù)已經(jīng)存入數(shù)據(jù)庫(kù)了,現(xiàn)在要把它們?nèi)〕鰜?lái)看看:

怎么使用python和Django完成博客數(shù)據(jù)庫(kù)的遷移

objects 是我們的模型管理器,它為我們提供一系列從數(shù)據(jù)庫(kù)中取數(shù)據(jù)方法,這里我們使用了 all 方法,表示我們要把對(duì)應(yīng)的數(shù)據(jù)全部取出來(lái)。可以看到 all 方法都返回了數(shù)據(jù),這些數(shù)據(jù)應(yīng)該是我們之前存進(jìn)去的,但是顯示的字符串有點(diǎn)奇怪,無(wú)法看出究竟是不是我們之前存入的數(shù)據(jù)。為了讓顯示出來(lái)的數(shù)據(jù)更加人性化一點(diǎn),我們?yōu)?3 個(gè)模型分別增加一個(gè) __str__ 方法:

from django.db import models
from django.contrib.auth.models import User
from django.utils.six import python_2_unicode_compatible

# python_2_unicode_compatible 裝飾器用于兼容 Python2
@python_2_unicode_compatible
class Category(models.Model):
 """
 Django 要求模型必須繼承 models.Model 類。
 Category 只需要一個(gè)簡(jiǎn)單的分類名 name 就可以了。
 CharField 指定了分類名 name 的數(shù)據(jù)類型,CharField 是字符型,
 CharField 的 max_length 參數(shù)指定其大長(zhǎng)度,超過(guò)這個(gè)長(zhǎng)度的分類名就不能被存入數(shù)據(jù)庫(kù)。
 當(dāng)然 Django 還為我們提供了多種其它的數(shù)據(jù)類型,如日期時(shí)間類型 DateTimeField、整數(shù)類型 IntegerField 等等。
 Django 內(nèi)置的全部類型可查看文檔:
 https://docs.djangoproject.com/en/1.10/ref/models/fields/#field-types
 """
 name = models.CharField(max_length=100)
 def __str__(self):
 return self.name

@python_2_unicode_compatible
class Tag(models.Model):
 """
 標(biāo)簽 Tag 也比較簡(jiǎn)單,和 Category 一樣。
 再次強(qiáng)調(diào)一定要繼承 models.Model 類!
 """
 name = models.CharField(max_length=100)
 def __str__(self):
 return self.name

@python_2_unicode_compatible
class Post(models.Model):
 """
 文章的數(shù)據(jù)庫(kù)表稍微復(fù)雜一點(diǎn),主要是涉及的字段更多。
 """
 # 文章標(biāo)題
 title = models.CharField(max_length=70)
 # 文章正文,我們使用了 TextField。
 # 存儲(chǔ)比較短的字符串可以使用 CharField,但對(duì)于文章的正文來(lái)說(shuō)可能會(huì)是一大段文本,因此使用 TextField 來(lái)存儲(chǔ)大段文本。
 body = models.TextField()
 # 這兩個(gè)列分別表示文章的創(chuàng)建時(shí)間和最后一次修改時(shí)間,存儲(chǔ)時(shí)間的字段用 DateTimeField 類型。
 created_time = models.DateTimeField()
 modified_time = models.DateTimeField()
 # 文章摘要,可以沒(méi)有文章摘要,但默認(rèn)情況下 CharField 要求我們必須存入數(shù)據(jù),否則就會(huì)報(bào)錯(cuò)。
 # 指定 CharField 的 blank=True 參數(shù)值后就可以允許空值了。
 excerpt = models.CharField(max_length=200, blank=True)
 # 這是分類與標(biāo)簽,分類與標(biāo)簽的模型我們已經(jīng)定義在上面。
 # 我們?cè)谶@里把文章對(duì)應(yīng)的數(shù)據(jù)庫(kù)表和分類、標(biāo)簽對(duì)應(yīng)的數(shù)據(jù)庫(kù)表關(guān)聯(lián)了起來(lái),但是關(guān)聯(lián)形式稍微有點(diǎn)不同。
 # 我們規(guī)定一篇文章只能對(duì)應(yīng)一個(gè)分類,但是一個(gè)分類下可以有多篇文章,所以我們使用的是 ForeignKey,即一對(duì)多的關(guān)聯(lián)關(guān)系。
 # 而對(duì)于標(biāo)簽來(lái)說(shuō),一篇文章可以有多個(gè)標(biāo)簽,同一個(gè)標(biāo)簽下也可能有多篇文章,所以我們使用 ManyToManyField,表明這是多對(duì)多的關(guān)聯(lián)關(guān)系。
 # 同時(shí)我們規(guī)定文章可以沒(méi)有標(biāo)簽,因此為標(biāo)簽 tags 指定了 blank=True。
 # 如果你對(duì) ForeignKey、ManyToManyField 不了解,請(qǐng)看教程中的解釋,亦可參考官方文檔:
 # https://docs.djangoproject.com/en/1.10/topics/db/models/#relationships
 category = models.ForeignKey(Category)
 tags = models.ManyToManyField(Tag, blank=True)
 # 文章作者,這里 User 是從 django.contrib.auth.models 導(dǎo)入的。
 # django.contrib.auth 是 Django 內(nèi)置的應(yīng)用,專門用于處理網(wǎng)站用戶的注冊(cè)、登錄等流程,User 是 Django 為我們已經(jīng)寫(xiě)好的用戶模型。
 # 這里我們通過(guò) ForeignKey 把文章和 User 關(guān)聯(lián)了起來(lái)。
 # 因?yàn)槲覀円?guī)定一篇文章只能有一個(gè)作者,而一個(gè)作者可能會(huì)寫(xiě)多篇文章,因此這是一對(duì)多的關(guān)聯(lián)關(guān)系,和 Category 類似。
 author = models.ForeignKey(User)
 def __str__(self):
 return self.title

定義好 __str__ 方法后,解釋器顯示的內(nèi)容將會(huì)是 __str__ 方法返回的內(nèi)容。這里 Category 返回分類名 name ,Tag 返回標(biāo)簽名,而 Post 返回它的 title

python_2_unicode_compatible 裝飾器用于兼容 Python2。如果你使用的 Python3 開(kāi)發(fā)環(huán)境,去掉這個(gè)裝飾器不會(huì)有任何影響。如果你使用的 Python2 開(kāi)發(fā)環(huán)境,而又不想使用這個(gè)裝飾器,則將 __str__ 方法改為 __unicode__ 方法即可。

先按 Ctrl + c 退出 Shell,再重新運(yùn)行 python manage.py shell 進(jìn)入 Shell。

怎么使用python和Django完成博客數(shù)據(jù)庫(kù)的遷移

改數(shù)據(jù):

怎么使用python和Django完成博客數(shù)據(jù)庫(kù)的遷移

首先通過(guò) get 方法根據(jù)分類名 name 獲取值為 category test 到分類,修改它的 name 屬性為新的值 category test new,然后調(diào)用 save 方法把修改保存到數(shù)據(jù)庫(kù),之后可以看到數(shù)據(jù)庫(kù)返回的數(shù)據(jù)已經(jīng)是修改后的值了。Tag、Post的修改也一樣。

刪除數(shù)據(jù):

怎么使用python和Django完成博客數(shù)據(jù)庫(kù)的遷移

先根據(jù)標(biāo)題 title 的值從數(shù)據(jù)庫(kù)中取出 Post,保存在變量 p 中,然后調(diào)用它的delete 方法,最后看到 Post.objects.all() 返回了一個(gè)空的 QuerySet(類似于一個(gè)列表),表明數(shù)據(jù)庫(kù)中已經(jīng)沒(méi)有 Post,Post 已經(jīng)被刪除了。

這就是 Django 對(duì)數(shù)據(jù)庫(kù)增、刪、改、查的操作。除了上述演示的方法外,Django 還為我們提供了大量其它的方法,這些方法有一部分會(huì)在教程中使用,用到時(shí)我會(huì)講解它們的用法。但以后你開(kāi)發(fā)自己的項(xiàng)目時(shí),你就需要通過(guò)閱讀 Django 的官方文檔 來(lái)了解有哪些方法可用以及如何使用它們。

以上是“怎么使用python和Django完成博客數(shù)據(jù)庫(kù)的遷移”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊頻道!

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

新聞名稱:怎么使用python和Django完成博客數(shù)據(jù)庫(kù)的遷移-創(chuàng)新互聯(lián)
當(dāng)前路徑:http://jinyejixie.com/article32/jipsc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、小程序開(kāi)發(fā)、全網(wǎng)營(yíng)銷推廣網(wǎng)站排名、自適應(yīng)網(wǎng)站、網(wǎng)站收錄

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化
民县| 广汉市| 磴口县| 南通市| 滦南县| 福鼎市| 徐汇区| 张家港市| 兰溪市| 固镇县| 尤溪县| 五家渠市| 大悟县| 盘山县| 天水市| 东丽区| 沅陵县| 万荣县| 精河县| 平潭县| 景泰县| 农安县| 昭通市| 乌鲁木齐县| 曲沃县| 柳河县| 屏南县| 阳朔县| 临沧市| 兰州市| 剑河县| 尖扎县| 青海省| 沁水县| 城市| 麻阳| 贵阳市| 兴业县| 嘉善县| 晴隆县| 郓城县|