您好,登录后才能下订单哦!
这篇文章将为大家详细讲解有关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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。