使用Djongo模塊在Django中使用MongoDB數(shù)據(jù)庫(kù)
一、安裝與配置
Djongo的項(xiàng)目官方地址為:https://nesdis.github.io/djongo/,我們可以通過pip命令直接安裝djongo:
pip install djongo
在安裝完成之后,我們就可以直接在Django中配置MongoDB數(shù)據(jù)庫(kù)的信息了。
在正常情況下,我們的Django項(xiàng)目中數(shù)據(jù)庫(kù)在settings.py文件中進(jìn)行配置,其一般配置如下所示:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } }
而我們使用Djongo的話,變化也不大,如下所示:
DATABASES = { 'default': { 'ENGINE': 'djongo', 'NAME': 'MongoDB數(shù)據(jù)庫(kù)的名稱', } }
可以發(fā)現(xiàn),這與Django原始的數(shù)據(jù)庫(kù)配置方法是一模一樣的,所不同的是,數(shù)據(jù)庫(kù)的引擎使用了djongo而非Django官方提供的數(shù)據(jù)庫(kù)封裝引擎。
我們用一個(gè)新的Django項(xiàng)目來演示一下djongo的使用。
首先創(chuàng)建Django項(xiàng)目和應(yīng)用:
然后修改項(xiàng)目的settings.py文件,填寫MongoDB數(shù)據(jù)庫(kù)的配置信息,Djongo提供了如下參數(shù)供我們?cè)O(shè)置數(shù)據(jù)庫(kù)的信息:
DATABASES = { 'default': { 'ENGINE': 'djongo', 'ENFORCE_SCHEMA': True, 'NAME': 'your-db-name', 'HOST': 'host-name or ip address', 'PORT': port_number, 'USER': 'db-username', 'PASSWORD': 'password', 'AUTH_SOURCE': 'db-name', 'AUTH_MECHANISM': 'SCRAM-SHA-1', 'REPLICASET': 'replicaset', 'SSL': 'ssl', 'SSL_CERTFILE': 'ssl_certfile', 'SSL_CA_CERTS': 'ssl_ca_certs', 'READ_PREFERENCE': 'read_preference' } }
我們的數(shù)據(jù)庫(kù)是本地的數(shù)據(jù)庫(kù),所以只需要設(shè)置一部分信息即可,其如下所示:
DATABASES = { 'default': { 'ENGINE': 'djongo', 'ENFORCE_SCHEMA': True, 'NAME': 'djongo_example', 'HOST': '127.0.0.1', 'PORT': 27017, } }
這樣,MongoDB在Django中的 配置就完成了,我們下面可以定義一些模型。
二、定義模型
Djongo的一大特點(diǎn)是可以無縫地銜接Django的ORM語(yǔ)法,包括模型定義的語(yǔ)法和模型操作的語(yǔ)法。現(xiàn)在,我們就為Django項(xiàng)目定義一些模型。
在默認(rèn)情況下,Django應(yīng)用的模型在其目錄下的models.py文件中定義。models.py文件初始化狀態(tài)下只有如下一行代碼:
from django.db import models
這是Django數(shù)據(jù)庫(kù)封裝的模型類,我們需要將其修改為Djongo提供的模型類,如下所示:
from djongo import models
然后,就可以按照Django的方式來定義模型了。在這里,我們定義了一個(gè)News()模型,用于存儲(chǔ)新聞:
class News(models.Model): title = models.CharField(verbose_name="標(biāo)題",max_length=50) author = models.CharField(verbose_name="作者",max_length=10) desc = models.CharField(verbose_name="簡(jiǎn)介",max_length=100) content = models.TextField(verbose_name="正文") create_time = models.DateTimeField(auto_now_add=True) update_time = models.DateTimeField(auto_now=True,auto_now_add=True) def __str__(self): return self.title class Meta: verbose_name = '新聞' verbose_name_plural = verbose_name
三、生成模型
定義好模型之后,繼續(xù)按照Django模型的使用方式,生成數(shù)據(jù)庫(kù)遷移,并執(zhí)行遷移:
python manage.py makemigrations app& python manage.py migrate
命令的執(zhí)行信息如下所示:
和使用SQL數(shù)據(jù)庫(kù)一樣,Django為新項(xiàng)目創(chuàng)建了我們定義的模型還有一些認(rèn)證管理相關(guān)的表,這是否是真的呢,我們?nèi)ongoDB數(shù)據(jù)庫(kù)里面查看一下:
MongoDB數(shù)據(jù)庫(kù)里面果然生成了一系列的數(shù)據(jù)表。
四、訪問Django Admin
經(jīng)過上面的演示,我們可以發(fā)現(xiàn)借助于Djongo模塊,我們可以無痛地以Django ORM的方式來使用MongoDB數(shù)據(jù)庫(kù)。那么作為Django重量級(jí)的admin后臺(tái)功能,是否能夠支持呢?我們繼續(xù)下面的演示。
首先,繼續(xù)在命令行中創(chuàng)建一個(gè)超級(jí)用戶:
python manage.py createsuperuser
其過程與使用其他SQL數(shù)據(jù)庫(kù)無異:
接著,我們將剛剛創(chuàng)建的News()模型添加到admin中,在admin.py中進(jìn)行設(shè)置:
from app.models import News admin.site.register(News)
隨后,運(yùn)行測(cè)試服務(wù)器:
五、操作數(shù)據(jù)
除此之外,我們最關(guān)心的還是對(duì)數(shù)據(jù)操縱是否方便。我們先在后臺(tái)界面嘗試一下新增數(shù)據(jù):
顯示新增成功了,我們?nèi)ongoDB里面看看是否存在:
六、最后
經(jīng)過上面初步的演示在Django中借助djongo模塊來使用MongoDB,可以發(fā)現(xiàn)其還是很方便的,優(yōu)點(diǎn)在于其改動(dòng)微乎其微,兼容性特別強(qiáng)。推薦大家在測(cè)試環(huán)境下充分地進(jìn)行測(cè)試使用,如果沒有問題,那么可以謹(jǐn)慎在生產(chǎn)環(huán)境中進(jìn)行部署。更多的使用方法和問題,大家可以訪問djongo項(xiàng)目官網(wǎng):https://nesdis.github.io/djongo/ 和它的GitHub項(xiàng)目地址:https://github.com/nesdis/djongo/
以上就是使用Djongo模塊在Django中使用MongoDB數(shù)據(jù)庫(kù)的詳細(xì)內(nèi)容,更多關(guān)于在Django中使用MongoDB數(shù)據(jù)庫(kù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Django集成MongoDB實(shí)現(xiàn)過程解析
- 使用python向MongoDB插入時(shí)間字段的操作
- 如何用python 操作MongoDB數(shù)據(jù)庫(kù)
- 用Python實(shí)現(xiàn)定時(shí)備份Mongodb數(shù)據(jù)并上傳到FTP服務(wù)器
- python連接mongodb數(shù)據(jù)庫(kù)操作數(shù)據(jù)示例
- python爬蟲用mongodb的理由
- python爬蟲數(shù)據(jù)保存到mongoDB的實(shí)例方法
- 基于python3.7利用Motor來異步讀寫Mongodb提高效率(推薦)
相關(guān)文章
django admin.py 外鍵,反向查詢的實(shí)例
今天小編就為大家分享一篇django admin.py 外鍵,反向查詢的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-07-07python中dump與dumps實(shí)現(xiàn)序列化
這篇文章就來介紹python中dump與dumps實(shí)現(xiàn)序列化,文章將圍繞dump與dumps實(shí)現(xiàn)序列化展開內(nèi)容且簡(jiǎn)精,需要的朋友可以參考一下,希望對(duì)你有所幫助2021-10-10Python圖像處理庫(kù)PIL中圖像格式轉(zhuǎn)換的實(shí)現(xiàn)
這篇文章主要介紹了Python圖像處理庫(kù)PIL中圖像格式轉(zhuǎn)換的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02matplotlib畫混淆矩陣與正確率曲線的實(shí)例代碼
混淆矩陣也稱誤差矩陣,是表示精度評(píng)價(jià)的一種標(biāo)準(zhǔn)格式,下面這篇文章主要給大家介紹了關(guān)于matplotlib畫混淆矩陣與正確率曲線的相關(guān)資料,需要的朋友可以參考下2021-06-06使用PyInstaller將Python程序文件轉(zhuǎn)換為可執(zhí)行程序文件
與py2exe一樣,PyInstaller程序也可以將Python的.py程序文件轉(zhuǎn)換為.exe,并且還有Linux的版本,下面我們就來詳細(xì)看一下如何使用PyInstaller將Python程序文件轉(zhuǎn)換為可執(zhí)行程序文件2016-07-07