使用Djongo模块在Django中使用MongoDB数据库
作者:州的先生 发布时间:2024-01-21 21:10:17
目录
一、安装与配置
二、定义模型
三、生成模型
四、访问Django Admin
五、操作数据
六、最后
一、安装与配置
Djongo的项目官方地址为:https://nesdis.github.io/djongo/,我们可以通过pip命令直接安装djongo:
pip install djongo
在安装完成之后,我们就可以直接在Django中配置MongoDB数据库的信息了。
在正常情况下,我们的Django项目中数据库在settings.py文件中进行配置,其一般配置如下所示:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
而我们使用Djongo的话,变化也不大,如下所示:
DATABASES = {
'default': {
'ENGINE': 'djongo',
'NAME': 'MongoDB数据库的名称',
}
}
可以发现,这与Django原始的数据库配置方法是一模一样的,所不同的是,数据库的引擎使用了djongo而非Django官方提供的数据库封装引擎。
我们用一个新的Django项目来演示一下djongo的使用。
首先创建Django项目和应用:
然后修改项目的settings.py文件,填写MongoDB数据库的配置信息,Djongo提供了如下参数供我们设置数据库的信息:
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'
}
}
我们的数据库是本地的数据库,所以只需要设置一部分信息即可,其如下所示:
DATABASES = {
'default': {
'ENGINE': 'djongo',
'ENFORCE_SCHEMA': True,
'NAME': 'djongo_example',
'HOST': '127.0.0.1',
'PORT': 27017,
}
}
这样,MongoDB在Django中的 配置就完成了,我们下面可以定义一些模型。
二、定义模型
Djongo的一大特点是可以无缝地衔接Django的ORM语法,包括模型定义的语法和模型操作的语法。现在,我们就为Django项目定义一些模型。
在默认情况下,Django应用的模型在其目录下的models.py文件中定义。models.py文件初始化状态下只有如下一行代码:
from django.db import models
这是Django数据库封装的模型类,我们需要将其修改为Djongo提供的模型类,如下所示:
from djongo import models
然后,就可以按照Django的方式来定义模型了。在这里,我们定义了一个News()模型,用于存储新闻:
class News(models.Model):
title = models.CharField(verbose_name="标题",max_length=50)
author = models.CharField(verbose_name="作者",max_length=10)
desc = models.CharField(verbose_name="简介",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
三、生成模型
定义好模型之后,继续按照Django模型的使用方式,生成数据库迁移,并执行迁移:
python manage.py makemigrations app&
python manage.py migrate
命令的执行信息如下所示:
和使用SQL数据库一样,Django为新项目创建了我们定义的模型还有一些认证管理相关的表,这是否是真的呢,我们去MongoDB数据库里面查看一下:
MongoDB数据库里面果然生成了一系列的数据表。
四、访问Django Admin
经过上面的演示,我们可以发现借助于Djongo模块,我们可以无痛地以Django ORM的方式来使用MongoDB数据库。那么作为Django重量级的admin后台功能,是否能够支持呢?我们继续下面的演示。
首先,继续在命令行中创建一个超级用户:
python manage.py createsuperuser
其过程与使用其他SQL数据库无异:
接着,我们将刚刚创建的News()模型添加到admin中,在admin.py中进行设置:
from app.models import News
admin.site.register(News)
随后,运行测试服务器:
五、操作数据
除此之外,我们最关心的还是对数据操纵是否方便。我们先在后台界面尝试一下新增数据:
显示新增成功了,我们去MongoDB里面看看是否存在:
六、最后
经过上面初步的演示在Django中借助djongo模块来使用MongoDB,可以发现其还是很方便的,优点在于其改动微乎其微,兼容性特别强。推荐大家在测试环境下充分地进行测试使用,如果没有问题,那么可以谨慎在生产环境中进行部署。更多的使用方法和问题,大家可以访问djongo项目官网:https://nesdis.github.io/djongo/ 和它的GitHub项目地址:https://github.com/nesdis/djongo/
来源:https://zmister.com/archives/1389.html
猜你喜欢
- 新建py文件,在里面写入Python代码,代码的功能是打印10次“Hello!”,将代码文件保存到桌面上:在命令行中运行Python脚本,并
- 这个问题我在给新云CMS升级时遇到了,按照升级步骤做完,后台登录时,出现“HTTP 错误 500.100 - 内部服务器错误 - ASP 错
- 在我们设计网页的时候,总会遇到一些不愉快的事情,最常见的莫过于在后台添加内容后才发现显示的页面被撑开,导致网页极度不美观。以前大
- 使用Tkinter(py2.7)text文本框中输入内容在界面中显示–较为规整的代码:import Tkinter as tkclass W
- 引言with 语句是从 Python 2.5 开始引入的一种与异常处理相关的功能(2.5 版本中要通过 from __future__ im
- 今天项目中遇到了中文编码的zip文件,处理了蛮长时间,所以记录下,以免下次踩坑。Python2下Python2中读取zip文件,zipfil
- stark组件是仿照django的admin模块开发的一套组件,它的作用是在网页上对注册的数据表进行增删改查操作一、配置1、创建
- 问题: pydev使用wx库开发的过程中,import时碰到wx可以识别,但是其它很多函数和变量上面全部是红叉,即无法识别。 解决方法: 1
- 当很多人发现在DW4中定义CSS很方便的时候,开始报怨FP2000不能定义CSS,甚至就此抨击FP2000如何的不好。事实上,在FP2000
- 某天气网站(www.数字.com)存有2011年至今的天气数据,有天看到一本爬虫教材提到了爬取这些数据的方法,学习之,并加以改进。准备爬的历
- 最近切换到了Ubuntu的系统作为工作环境, 在使用Pycharm的时候, 出现了个奇怪的问题中文是无法正常输入的, 然后找遍了网上的解决办
- Py-Spy介绍引用官方的介绍:Py-Spy是Python程序的抽样分析器。 它允许您可视化查看Python程序在哪些地方花了更多时间,整个
- 轮廓概述轮廓可以简单认为成将连续的点(连着边界)连在一起的曲线,具有相同的颜色或者灰度。轮廓在形状分析和物体的检测和识别中很有用。 
- 错误号 错误信息5 &n
- 一、需求说明能够根据模板批量生成docx文档。具体而言,读取excel中的数据,然后使用python批量生成docx文档。二、实验准备准备e
- python版本为python3.51.要求1)输入用户名密码2)认证成功后显示欢迎信息3)输错三次后锁定2.需求分析1)用户信息存储在文件
- Translate From:stevesouders原文:高性能网站设计:不要使用@import在高性能网站设计的第五章,我简要的提到@i
- 今天我们来介绍下Python基础教程学习之iter() 方法另外的用法。据说很少有人知道这个用法!一、上代码、学用法我们都比较熟悉 iter
- 1. 卡住是怎么办按照以下步骤, 前提是你需要懂点英文:尽可能自己想办法解决仔细阅读相关文档, 确保不错过任何相关内容在Google, 百度
- 以下示例显示如何在 XPath 查询中指定轴。这些示例中的 XPath 查询都在 SampleSchema1.xml 中所包含的映射架构上指