Django项目连接MongoDB的三种方法
作者:雪中鱼01 发布时间:2022-05-27 05:23:43
目录
Django 和 MongoDB 设置
安装:
创建:
激活:
使用 PyMongo 连接 Django 和 MongoDB
使用 MongoEngine 连接 Django 和 MongoDB
使用 Djongo 连接 Django 和 MongoDB
Django 和 MongoDB 教程
有三种方法连接Django到MongoDB数据库
1.PyMongo:PyMongo 是 MongoDB 与 Django 交互的标准驱动程序。这是在 Python 中使用 MongoDB 的官方和首选方式。 PyMongo 提供了执行所有数据库操作的功能,例如搜索、删除、更新和插入。由于 PyMongo 可与 PyPI 一起使用,您可以使用 pip 命令快速安装它。
2.MongoEngine: MongoEngine 是一个 Python 对象文档映射器。它类似于关系数据库中的 Object-Relational-Mapper。 MongoEngine 具有易于学习和使用的声明式 API。
3.Djongo:如果您正在使用 SQL 这样的关系型数据库并希望迁移到 MongoDB,那么您可以使用 Djongo。在不更改 Django ORM 的情况下,Djongo 将所有 SQL 查询转换为 MongoDB 语法查询。
哪种方法连接到 Django MongoDB 更好呢?
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 连接 Django 和 MongoDB
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 连接 Django 和 MongoDB
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 连接 Django 和 MongoDB
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 命令。
Django 和 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 的不同方式,我们必须为我们的项目选择正确的方式。这些方法各有优缺点。 例如,如果您是从头开始,MongoEngine 是一个不错的选择,因为它可以轻松处理大量非结构化数据。如果您要在应用程序中编写大量复杂的查询,则应该使用 PyMongo。 如果您有一个 Django 项目需要从另一个数据库迁移到 MongoDB,那么 Djongo 更合适,因为这需要最少的代码更改。
来源:https://blog.csdn.net/songkai558919/article/details/120321380
猜你喜欢
- 内容摘要:图片切换效果在网页制作中经常被使用,好的切换效果不仅增加了网站的实用行也提升了网站的趣味性。而图片切换方法有的使用flash来实现
- JavaScript 中的并没有提供像 VBScript 里的 DateAdd 方法用于日
- 本文实例讲述了Python3的urllib.parse常用函数。分享给大家供大家参考,具体如下:1、获取url参数>>>
- 这个问题用了我整整一晚上的时间才解决,希望有人遇到和我一样的时能少走些弯路。启动Django,服务器拒绝访问,可以尝试以下方法解决:1. 没
- 我的测试环境是2000sever ie6.0+sp4 MYIE1.31 (成功通过测试)关闭窗口的途径常用4种:1.双击左上角图标2.直接双
- 导读:由于banner一般用于专题类网站,在门户网站的二级页面,用户进来之前,在首页已经对主题有一定的了解和认识,所以banner的作用是在
- 我们看一个现象:import pandas as pdtitanic = pd.read_csv('titanic_data.csv
- 什么是变量在Python编程语言中,变量是用于存储数据值的标识符。它们可以用来引用数据值,而不是直接使用值本身。可以使用等号(=)运算符来将
- 本文探讨了提高MySQL 数据库性能的思路,并从8个方面给出了具体的解决方法。1、选取最适用的字段属性MySQL可以很好的支持大数据量的存取
- 1、File > Setting > Project:xxx > Project Interpreter 选择或添加环境2
- 数据库系统的安全性包括很多方面。由于很多情况下,数据库服务器容许客户机从网络上连接,因此客户机连接的安全对MySQL数据库安全有很重要的影响
- Python过滤txt文件内重复内容,并将过滤后的内容保存到新的txt中示例如下 原文件处理之后的文件 直接上代码# -*-coding:u
- 以GraphViz为例:下载安装好的路径名字为C:/Program Files (x86)/Graphviz2.38import osos.
- 我就废话不多说,直接上代码吧!from PIL import ImageGrabimport timeimport scheduleimpo
- 一、简介time模块提供各种操作时间的函数说明:一般有两种表示时间的方式:第一种是时间戳的方式(相对于1970.1.1 00:00:00以秒
- 大家都知道当任务过多,任务量过大时如果想提高效率的一个最简单的方法就是用多线程去处理,比如爬取上万个网页中的特定数据,以及将爬取数据和清洗数
- 一. 安装 Beautiful Soup首先,您需要安装 Beautiful Soup。在终端或命令提示符中运行以下命令:pip insta
- 使用 sorted() 函数使用 sorted() 函数对字典进行排序,将其转换为元组列表,再按照指定的键或者值进行排序。按照键排序的示例代
- SQL Server的作业调度来建立自动备份的方法◆1、进入企业管理器中->管理->sql server代理->作业;◆2
- 目录一、介绍二、前提三、get的请求3.1 GET无参请求3.2 GET传参四、post请求五、Requests响应六、Request扩充七