您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關Django項目如何連接MongoDB,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
為了讓集成工作,你應該有一個 Django 和 MongoDB 設置。如果你的機器上有 Python,你可以使用 pip 安裝 Django。如果您希望在特定環境而不是整個系統中安裝 Django,您可以創建一個虛擬環境。根據您的 Python 版本使用 pip/pip3:
Windows:
pip install virtualenvwrapper-win
Mac OS / Linux:
pip install virtualenvwrapper
Windows:
mkvirtualenv MyProjectEnvt
Mac OS / Linux:
virtualenv MyProjectEnvt
Mac OS / Linux
source MyProjectEnvt/bin/activate
Windows:
workon MyProjectEnvt
要停用虛擬環境,您只需鍵入命令deactivate。 現在使用 pip install Django 安裝 Django。 要啟動 Django 項目,請轉到要啟動項目的文件夾并使用以下命令:
django-admin startproject <project_name>.
例如:
C:\Users\myuser\project_files>django-admin startproject MyFirstDjangoProj
C:\Users\myuser\project_files>cd MyFirstDjangoProj
要創建應用程序,請使用以下命令:
python manage.py startapp myfirstapp
如果您使用的是 Python 版本 >= 3.0,請將命令中的 python 替換為 python3。 在應用程序內部,我們可以有許多模型將映射到 MongoDB 中的集合和文檔。 啟動項目后,所有文件都將在項目文件夾中可用。使用 python manage.py runserver 命令啟動服務器。 您的 Django 設置現已完成。 如果您還沒有設置 MongoDB,請使用 MongoDB Atlas 來充分利用云托管。 Atlas 與所有主要的云提供商無縫合作。
PyMongo 對于將 JSON 數據寫入 MongoDB 非常有效,并且允許在 Python 代碼本身中使用 MongoDB 查詢。我們可以使用 PyMongo 像語法一樣檢索字典中的數據。 使用 pip/pip3 命令輕松安裝 PyMongo:
pip install pymongo[snappy,gssapi,srv,tls]
如果您使用的是虛擬環境,則必須在 ..\venv\Lib\site-packages 文件夾中安裝 pymongo。 此外,安裝 dnspython 以使用 mongodb+srv:// URI 與命令:
pip install dnspython
使用 PyMongo,我們可以通過為連接實例指定正確的數據庫名稱來同時運行多個數據庫。
讓我們創建一個示例 pymongo 會話。為此,有兩種方法:
1.我們可以在 utils 文件中創建一個客戶端,任何想要與 MongoDB 交互的視圖都可以使用它。在您的項目文件夾(與 manage.py 相同的位置)中創建一個 utils.py 文件并實例化客戶端:
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']
您可能已經在其他代碼示例或教程中看到了 Connection 類。連接已被棄用,所以不要使用它。
如果您使用的是默認端口和主機,只需調用 MongoClient()。要連接到 localhost,我們可以明確指定主機和端口為:
MongoClient(‘localhost', 27017)
或者
使用 URL 格式 MongoClient(‘mongodb://localhost: 27017/')
由于我們已經在此處創建了客戶端,因此我們需要在 settings.py 文件中注釋 DATABASES 部分。使用三重引號注釋相同的內容。
MongoEngine 是 PyMongo 之上的 ORM 層。因此,您的系統仍然需要 PyMongo (>=3.4) 才能使用 MongoEngine。
使用 MongoEngine 連接 Django 和 MongoDB,您可以使用 ListField 和 DictField 等字段來處理巨大的非結構化 JSON 數據。
首先,使用以下命令安裝 MongoEngine:
pip install mongoengine
正如我們在上一節中看到的,在使用 PyMongo 時,我們必須在 settings.py 中注釋 DATABASES 部分。然后,要使用 MongoEngine,請添加以下內容:
import mongoengine mongoengine.connect(db=db_name, host=hostname, username=username, password=pwd)
使用 MongoEngine,我們必須在 Django 應用程序的 models.py 文件中定義一個模式。 MongoDB 是無模式的。該架構僅在應用程序級別執行,從而使未來的任何更改都變得快速而輕松。 MongoEngine 類似于 Django 的默認 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() |
不同之處在于我們使用的是模型,當使用 MongoEngine 時,模型被文檔和字段替換。 還有許多其他工具可以與 PyMongo 一起使用。
Djongo 是對 PyMongo 的改進,因為開發人員無需編寫冗長的查詢。它將 Python 對象映射到 MongoDB 文檔,即對象文檔映射 (ODM)。 Djongo 確保只有干凈的數據才能進入數據庫。通過使用 Djongo 執行完整性檢查、應用驗證等,無需修改現有的 Django ORM。
安裝Djongo:
pip install djongo
現在,轉到您的項目文件夾(例如 MyFirstDjangoProj),并打開 settings.py 文件。您可以在 Textpad、Python IDE 或任何編輯器上對其進行編輯。搜索 DATABASES,并將設置更改為指向 MongoDB。 ENGINE 將是 djongo,數據庫名稱 (NAME) 將是您的 MongoDB 數據庫名稱。
DATABASES = { 'default': { 'ENGINE': 'djongo', 'NAME': 'db-name', } }
如果您的數據庫不在本地主機上或受到保護,您還應該填寫 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 設置中添加了應用名稱:
INSTALLED_APPS = [ 'myfirstapp', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ]
現在我們有了 Django 項目(和應用程序),您可以使用以下命令在 MongoDB 中創建集合:
python manage.py makemigrations <app-name> python manage.py migrate
將創建集合(應用程序中的 Django 模型——請注意,我們談論的是應用程序而不是項目)。您可以通過打開 Django Admin 來檢查相同的內容。 您可以使用管理 GUI 或手動將數據插入到集合中。 要使用管理控制臺,請打開瀏覽器并轉到 http://127.0.0.1:8000/admin(或 localhost)。您應該創建一個超級用戶以進入管理控制臺。如果您的應用程序中沒有任何模型,請按照有關如何創建和注冊模型的 Django 教程進行操作。 如果您希望 Djongo 免遷移,請在您的數據庫配置中設置 ENFORCE_SCHEMA: False。使用此設置,集合是動態創建的,Djongo 不會將 SQL 語句轉換為 MongoDB 命令。
(請隨意編寫代碼或從此 GitHub 存儲庫下載完整代碼。) 在本快速教程中,我們將演示如何使用 PyMongo 進行簡單的 CRUD 操作。為此,讓我們創建一個 PyMongo 會話:
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 集群并進行驗證。
關于“Django項目如何連接MongoDB”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。