Django項(xiàng)目連接MongoDB的三種方法
有三種方法連接Django到MongoDB數(shù)據(jù)庫
1.PyMongo:PyMongo 是 MongoDB 與 Django 交互的標(biāo)準(zhǔn)驅(qū)動(dòng)程序。這是在 Python 中使用 MongoDB 的官方和首選方式。 PyMongo 提供了執(zhí)行所有數(shù)據(jù)庫操作的功能,例如搜索、刪除、更新和插入。由于 PyMongo 可與 PyPI 一起使用,您可以使用 pip 命令快速安裝它。
2.MongoEngine: MongoEngine 是一個(gè) Python 對(duì)象文檔映射器。它類似于關(guān)系數(shù)據(jù)庫中的 Object-Relational-Mapper。 MongoEngine 具有易于學(xué)習(xí)和使用的聲明式 API。
3.Djongo:如果您正在使用 SQL 這樣的關(guān)系型數(shù)據(jù)庫并希望遷移到 MongoDB,那么您可以使用 Djongo。在不更改 Django ORM 的情況下,Djongo 將所有 SQL 查詢轉(zhuǎn)換為 MongoDB 語法查詢。
哪種方法連接到 Django MongoDB 更好呢?
Django 和 MongoDB 設(shè)置
為了讓集成工作,你應(yīng)該有一個(gè) Django 和 MongoDB 設(shè)置。如果你的機(jī)器上有 Python,你可以使用 pip 安裝 Django。如果您希望在特定環(huán)境而不是整個(gè)系統(tǒng)中安裝 Django,您可以創(chuàng)建一個(gè)虛擬環(huán)境。根據(jù)您的 Python 版本使用 pip/pip3:
安裝:
Windows:
pip install virtualenvwrapper-win
Mac OS / Linux:
pip install virtualenvwrapper
創(chuàng)建:
Windows:
mkvirtualenv MyProjectEnvt
Mac OS / Linux:
virtualenv MyProjectEnvt
激活:
Mac OS / Linux
source MyProjectEnvt/bin/activate
Windows:
workon MyProjectEnvt
要停用虛擬環(huán)境,您只需鍵入命令deactivate。 現(xiàn)在使用 pip install Django 安裝 Django。 要啟動(dòng) Django 項(xiàng)目,請(qǐng)轉(zhuǎn)到要啟動(dòng)項(xiàng)目的文件夾并使用以下命令:
django-admin startproject <project_name>.
例如:
C:\Users\myuser\project_files>django-admin startproject MyFirstDjangoProj
C:\Users\myuser\project_files>cd MyFirstDjangoProj
要?jiǎng)?chuàng)建應(yīng)用程序,請(qǐng)使用以下命令:
python manage.py startapp myfirstapp
如果您使用的是 Python 版本 >= 3.0,請(qǐng)將命令中的 python 替換為 python3。 在應(yīng)用程序內(nèi)部,我們可以有許多模型將映射到 MongoDB 中的集合和文檔。 啟動(dòng)項(xiàng)目后,所有文件都將在項(xiàng)目文件夾中可用。使用 python manage.py runserver 命令啟動(dòng)服務(wù)器。 您的 Django 設(shè)置現(xiàn)已完成。 如果您還沒有設(shè)置 MongoDB,請(qǐng)使用 MongoDB Atlas 來充分利用云托管。 Atlas 與所有主要的云提供商無縫合作。
使用 PyMongo 連接 Django 和 MongoDB
PyMongo 對(duì)于將 JSON 數(shù)據(jù)寫入 MongoDB 非常有效,并且允許在 Python 代碼本身中使用 MongoDB 查詢。我們可以使用 PyMongo 像語法一樣檢索字典中的數(shù)據(jù)。 使用 pip/pip3 命令輕松安裝 PyMongo:
pip install pymongo[snappy,gssapi,srv,tls]
如果您使用的是虛擬環(huán)境,則必須在 ..\venv\Lib\site-packages 文件夾中安裝 pymongo。 此外,安裝 dnspython 以使用 mongodb+srv:// URI 與命令:
pip install dnspython
使用 PyMongo,我們可以通過為連接實(shí)例指定正確的數(shù)據(jù)庫名稱來同時(shí)運(yùn)行多個(gè)數(shù)據(jù)庫。
讓我們創(chuàng)建一個(gè)示例 pymongo 會(huì)話。為此,有兩種方法:
1.我們可以在 utils 文件中創(chuàng)建一個(gè)客戶端,任何想要與 MongoDB 交互的視圖都可以使用它。在您的項(xiàng)目文件夾(與 manage.py 相同的位置)中創(chuàng)建一個(gè) utils.py 文件并實(shí)例化客戶端:
from pymongo import MongoClient def get_db_handle(db_name, host, port, username, password): client = MongoClient(host=host, port=int(port), username=username, password=password ) db_handle = client['db_name'] return db_handle, client
然后可以在 ./myfirstapp/view.py 中使用此方法。
2.獲取連接的另一種方法是使用 connection_string:
from pymongo import MongoClient client = pymongo.MongoClient('connection_string') db = client['db_name']
在
connection_string = mongodb+srv://<username>:<password>@<atlas cluster> /<myFirstDatabase>?retryWrites=true&w=majority
例如:
makemyrx_db = client['sample_medicines'] #collection object medicines_collection = makemyrx_db['medicinedetails']
您可能已經(jīng)在其他代碼示例或教程中看到了 Connection 類。連接已被棄用,所以不要使用它。
如果您使用的是默認(rèn)端口和主機(jī),只需調(diào)用 MongoClient()。要連接到 localhost,我們可以明確指定主機(jī)和端口為:
MongoClient(‘localhost', 27017)
或者
使用 URL 格式 MongoClient(‘mongodb://localhost: 27017/')
由于我們已經(jīng)在此處創(chuàng)建了客戶端,因此我們需要在 settings.py 文件中注釋 DATABASES 部分。使用三重引號(hào)注釋相同的內(nèi)容。
使用 MongoEngine 連接 Django 和 MongoDB
MongoEngine 是 PyMongo 之上的 ORM 層。因此,您的系統(tǒng)仍然需要 PyMongo (>=3.4) 才能使用 MongoEngine。
使用 MongoEngine 連接 Django 和 MongoDB,您可以使用 ListField 和 DictField 等字段來處理巨大的非結(jié)構(gòu)化 JSON 數(shù)據(jù)。
首先,使用以下命令安裝 MongoEngine:
pip install mongoengine
正如我們?cè)谏弦还?jié)中看到的,在使用 PyMongo 時(shí),我們必須在 settings.py 中注釋 DATABASES 部分。然后,要使用 MongoEngine,請(qǐng)?zhí)砑右韵聝?nèi)容:
import mongoengine mongoengine.connect(db=db_name, host=hostname, username=username, password=pwd)
使用 MongoEngine,我們必須在 Django 應(yīng)用程序的 models.py 文件中定義一個(gè)模式。 MongoDB 是無模式的。該架構(gòu)僅在應(yīng)用程序級(jí)別執(zhí)行,從而使未來的任何更改都變得快速而輕松。 MongoEngine 類似于 Django 的默認(rèn) ORM,但在 model.py 中有以下變化:
Django's ORM | MongoEngine |
from django.db import models |
from mongoengine import Document, fields or from mongoengine import * |
Model | Document |
models.CharField | fields.StringField() |
不同之處在于我們使用的是模型,當(dāng)使用 MongoEngine 時(shí),模型被文檔和字段替換。 還有許多其他工具可以與 PyMongo 一起使用。
使用 Djongo 連接 Django 和 MongoDB
Djongo 是對(duì) PyMongo 的改進(jìn),因?yàn)殚_發(fā)人員無需編寫冗長(zhǎng)的查詢。它將 Python 對(duì)象映射到 MongoDB 文檔,即對(duì)象文檔映射 (ODM)。 Djongo 確保只有干凈的數(shù)據(jù)才能進(jìn)入數(shù)據(jù)庫。通過使用 Djongo 執(zhí)行完整性檢查、應(yīng)用驗(yàn)證等,無需修改現(xiàn)有的 Django ORM。
安裝Djongo:
pip install djongo
現(xiàn)在,轉(zhuǎn)到您的項(xiàng)目文件夾(例如 MyFirstDjangoProj),并打開 settings.py 文件。您可以在 Textpad、Python IDE 或任何編輯器上對(duì)其進(jìn)行編輯。搜索 DATABASES,并將設(shè)置更改為指向 MongoDB。 ENGINE 將是 djongo,數(shù)據(jù)庫名稱 (NAME) 將是您的 MongoDB 數(shù)據(jù)庫名稱。
DATABASES = { 'default': { 'ENGINE': 'djongo', 'NAME': 'db-name', } }
如果您的數(shù)據(jù)庫不在本地主機(jī)上或受到保護(hù),您還應(yīng)該填寫 CLIENT 信息,如 HOST、USERNAME、PASSWORD 等。
DATABASES = { 'default': { 'ENGINE': 'djongo', 'NAME': 'your-db-name', 'ENFORCE_SCHEMA': False, 'CLIENT': { 'host': 'mongodb+srv://<username>:<password>@<atlas cluster>/<myFirstDatabase>?retryWrites=true&w=majority' } } }
確保在 settings.py 的 INSTALLED_APPS 設(shè)置中添加了應(yīng)用名稱:
INSTALLED_APPS = [ 'myfirstapp', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ]
現(xiàn)在我們有了 Django 項(xiàng)目(和應(yīng)用程序),您可以使用以下命令在 MongoDB 中創(chuàng)建集合:
python manage.py makemigrations <app-name> python manage.py migrate
將創(chuàng)建集合(應(yīng)用程序中的 Django 模型——請(qǐng)注意,我們談?wù)摰氖菓?yīng)用程序而不是項(xiàng)目)。您可以通過打開 Django Admin 來檢查相同的內(nèi)容。 您可以使用管理 GUI 或手動(dòng)將數(shù)據(jù)插入到集合中。 要使用管理控制臺(tái),請(qǐng)打開瀏覽器并轉(zhuǎn)到 http://127.0.0.1:8000/admin(或 localhost)。您應(yīng)該創(chuàng)建一個(gè)超級(jí)用戶以進(jìn)入管理控制臺(tái)。如果您的應(yīng)用程序中沒有任何模型,請(qǐng)按照有關(guān)如何創(chuàng)建和注冊(cè)模型的 Django 教程進(jìn)行操作。 如果您希望 Djongo 免遷移,請(qǐng)?jiān)谀臄?shù)據(jù)庫配置中設(shè)置 ENFORCE_SCHEMA: False。使用此設(shè)置,集合是動(dòng)態(tài)創(chuàng)建的,Djongo 不會(huì)將 SQL 語句轉(zhuǎn)換為 MongoDB 命令。
Django 和 MongoDB 教程
(請(qǐng)隨意編寫代碼或從此 GitHub 存儲(chǔ)庫下載完整代碼。) 在本快速教程中,我們將演示如何使用 PyMongo 進(jìn)行簡(jiǎn)單的 CRUD 操作。為此,讓我們創(chuàng)建一個(gè) PyMongo 會(huì)話:
import pymongo #connect_string = 'mongodb+srv://<username>:<password>@<atlas cluster>/<myFirstDatabase>?retryWrites=true&w=majority' from django.conf import settings my_client = pymongo.MongoClient(connect_string) # First define the database name dbname = my_client['sample_medicines'] # Now get/create collection name (remember that you will see the database in your mongodb cluster only after you create a collection collection_name = dbname["medicinedetails"] #let's create two documents medicine_1 = { "medicine_id": "RR000123456", "common_name" : "Paracetamol", "scientific_name" : "", "available" : "Y", "category": "fever" } medicine_2 = { "medicine_id": "RR000342522", "common_name" : "Metformin", "scientific_name" : "", "available" : "Y", "category" : "type 2 diabetes" } # Insert the documents collection_name.insert_many([medicine_1,medicine_2]) # Check the count count = collection_name.count() print(count) # Read the documents med_details = collection_name.find({}) # Print on the terminal for r in med_details: print(r["common_name"]) # Update one document update_data = collection_name.update_one({'medicine_id':'RR000123456'}, {'$set':{'common_name':'Paracetamol 500'}}) # Delete one document delete_data = collection_name.delete_one({'medicine_id':'RR000123456'})
接下來,您可以連接到您的 MongoDB Atlas 集群并進(jìn)行驗(yàn)證。
下一步 現(xiàn)在我們知道了連接 Django 和 MongoDB 的不同方式,我們必須為我們的項(xiàng)目選擇正確的方式。這些方法各有優(yōu)缺點(diǎn)。 例如,如果您是從頭開始,MongoEngine 是一個(gè)不錯(cuò)的選擇,因?yàn)樗梢暂p松處理大量非結(jié)構(gòu)化數(shù)據(jù)。如果您要在應(yīng)用程序中編寫大量復(fù)雜的查詢,則應(yīng)該使用 PyMongo。 如果您有一個(gè) Django 項(xiàng)目需要從另一個(gè)數(shù)據(jù)庫遷移到 MongoDB,那么 Djongo 更合適,因?yàn)檫@需要最少的代碼更改。
到此這篇關(guān)于Django項(xiàng)目連接MongoDB的三種方法的文章就介紹到這了,更多相關(guān)Django連接MongoDB內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實(shí)現(xiàn)隨機(jī)游走的示例代碼
隨機(jī)游走是一個(gè)數(shù)學(xué)對(duì)象,稱為隨機(jī)或隨機(jī)過程,它描述了一條路徑,該路徑由一些數(shù)學(xué)空間上的一系列隨機(jī)步驟組成,下面我們就來學(xué)習(xí)一下Python如何實(shí)現(xiàn)隨機(jī)游走的吧2023-12-12python運(yùn)行或調(diào)用另一個(gè)py文件或參數(shù)方式
這篇文章主要介紹了python運(yùn)行或調(diào)用另一個(gè)py文件或參數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08Python flask框架實(shí)現(xiàn)查詢數(shù)據(jù)庫并顯示數(shù)據(jù)
這篇文章主要介紹了Python flask框架實(shí)現(xiàn)查詢數(shù)據(jù)庫并顯示數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06pytorch中的squeeze函數(shù)、cat函數(shù)使用
這篇文章主要介紹了pytorch中的squeeze函數(shù)、cat函數(shù)使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05Pycharm安裝scrapy及初始化爬蟲項(xiàng)目的完整步驟
因?yàn)槿腴Tpython以來一直使用pycharm,所以對(duì)著黑白的DOS不習(xí)慣,所以此次來實(shí)現(xiàn)使用pycharm進(jìn)行實(shí)現(xiàn)使用scrapy框架,下面這篇文章主要給大家介紹了關(guān)于Pycharm安裝scrapy及初始化爬蟲項(xiàng)目的完整步驟,需要的朋友可以參考下2022-08-08用Python Flask創(chuàng)建簡(jiǎn)潔高效的URL短鏈接服務(wù)
本文介紹了如何使用Python Flask框架創(chuàng)建URL短鏈接服務(wù)。通過詳細(xì)的步驟和代碼示例,讀者將學(xué)會(huì)如何搭建一個(gè)高效的URL縮短服務(wù),包括生成短鏈接、重定向、還原長(zhǎng)鏈接等功能。本文還介紹了如何使用Redis數(shù)據(jù)庫實(shí)現(xiàn)短鏈接的存儲(chǔ)和管理和如何優(yōu)化短鏈接的訪問速度和可靠性2023-04-04Python一行代碼實(shí)現(xiàn)快速排序的方法
排序算法是在高考或中考中出現(xiàn)頻率最多的點(diǎn),所以大家要掌握,今天小編給大家?guī)砹送ㄟ^Python一行代碼實(shí)現(xiàn)快速排序的方法,感興趣的朋友跟隨小編一起看看吧2019-04-04python網(wǎng)絡(luò)爬蟲之模擬登錄 自動(dòng)獲取cookie值 驗(yàn)證碼識(shí)別的具體實(shí)現(xiàn)
有時(shí),我們需要爬取一些基于個(gè)人用戶的用戶信息(需要登陸后才可以查看)就要進(jìn)行模擬登陸,因?yàn)轵?yàn)證碼往往是作為登陸請(qǐng)求中的請(qǐng)求參數(shù)被使用,就需要識(shí)別驗(yàn)證碼2021-09-09