使用Djongo模块在Django中使用MongoDB数据库


Posted in Python onJune 20, 2021
目录
  • 一、安装与配置
  • 二、定义模型
  • 三、生成模型
  • 四、访问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项目和应用:

使用Djongo模块在Django中使用MongoDB数据库

然后修改项目的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

命令的执行信息如下所示:

使用Djongo模块在Django中使用MongoDB数据库

和使用SQL数据库一样,Django为新项目创建了我们定义的模型还有一些认证管理相关的表,这是否是真的呢,我们去MongoDB数据库里面查看一下:

使用Djongo模块在Django中使用MongoDB数据库

MongoDB数据库里面果然生成了一系列的数据表。

 

四、访问Django Admin

经过上面的演示,我们可以发现借助于Djongo模块,我们可以无痛地以Django ORM的方式来使用MongoDB数据库。那么作为Django重量级的admin后台功能,是否能够支持呢?我们继续下面的演示。

首先,继续在命令行中创建一个超级用户:

python manage.py createsuperuser

其过程与使用其他SQL数据库无异:

使用Djongo模块在Django中使用MongoDB数据库

接着,我们将刚刚创建的News()模型添加到admin中,在admin.py中进行设置:

from app.models import News
admin.site.register(News)

随后,运行测试服务器:

使用Djongo模块在Django中使用MongoDB数据库

 

五、操作数据

除此之外,我们最关心的还是对数据操纵是否方便。我们先在后台界面尝试一下新增数据:

使用Djongo模块在Django中使用MongoDB数据库

显示新增成功了,我们去MongoDB里面看看是否存在:

使用Djongo模块在Django中使用MongoDB数据库

 

六、最后

经过上面初步的演示在Django中借助djongo模块来使用MongoDB,可以发现其还是很方便的,优点在于其改动微乎其微,兼容性特别强。推荐大家在测试环境下充分地进行测试使用,如果没有问题,那么可以谨慎在生产环境中进行部署。更多的使用方法和问题,大家可以访问djongo项目官网:https://nesdis.github.io/djongo/ 和它的GitHub项目地址:https://github.com/nesdis/djongo/

以上就是使用Djongo模块在Django中使用MongoDB数据库的详细内容,更多关于在Django中使用MongoDB数据库的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python 字符串split的用法分享
Mar 23 Python
Python FTP操作类代码分享
May 13 Python
利用python实现xml与数据库读取转换的方法
Jun 17 Python
Python基于matplotlib绘制栈式直方图的方法示例
Aug 09 Python
Python基础语言学习笔记总结(精华)
Nov 14 Python
python的常用模块之collections模块详解
Dec 06 Python
Python编程在flask中模拟进行Restful的CRUD操作
Dec 28 Python
用Python实现大文本文件切割的方法
Jan 12 Python
Python创建一个元素都为0的列表实例
Nov 28 Python
Python3 Click模块的使用方法详解
Feb 12 Python
Python celery原理及运行流程解析
Jun 13 Python
Python编程中Python与GIL互斥锁关系作用分析
Sep 15 Python
python自动计算图像数据集的RGB均值
详解如何用Python实现感知器算法
python中24小时制转换为12小时制的方法
Jun 18 #Python
用Python selenium实现淘宝抢单机器人
python中pandas对多列进行分组统计的实现
python 常用的异步框架汇总整理
Jun 18 #Python
Opencv中cv2.floodFill算法的使用
You might like
《魔兽世界》惊魂幻象将获得调整
2020/03/08 其他游戏
php对二维数组进行相关操作(排序、转换、去空白等)
2015/11/04 PHP
微信公众号开发之通过接口删除菜单
2017/02/20 PHP
ajax+php实现无刷新验证手机号的实例
2017/12/22 PHP
java script编程起步(第三课)
2007/01/10 Javascript
javascript动态的改变IFrame的高度实现自动伸展
2013/10/12 Javascript
JS小功能(offsetLeft实现图片滚动效果)实例代码
2013/11/28 Javascript
收集json解析的四种方法分享
2014/01/17 Javascript
angularjs基础教程
2014/12/25 Javascript
jQuery实现Tab菜单滚动切换的方法
2015/09/21 Javascript
clipboard.js无需Flash无需依赖任何JS库实现文本复制与剪切
2015/10/10 Javascript
JS基于递归算法实现1,2,3,4,5,6,7,8,9倒序放入数组中的方法
2017/01/03 Javascript
javascript中apply/call和bind的使用
2017/02/15 Javascript
Node.js常用工具之util模块
2017/03/09 Javascript
javascript回调函数的概念理解与用法分析
2017/05/27 Javascript
vue中各选项及钩子函数执行顺序详解
2018/08/25 Javascript
微信小程序实现多选框全选与取消全选功能示例
2019/05/14 Javascript
jquery+css3实现的经典弹出层效果示例
2020/05/16 jQuery
[32:36]完美世界DOTA2联赛PWL S3 LBZS vs CPG 第二场 12.12
2020/12/16 DOTA
python之从文件读取数据到list的实例讲解
2018/04/19 Python
使用 pytorch 创建神经网络拟合sin函数的实现
2020/02/24 Python
浅谈Python3多线程之间的执行顺序问题
2020/05/02 Python
python开发前景如何
2020/06/11 Python
工程师必须了解的LRU缓存淘汰算法以及python实现过程
2020/10/15 Python
香港士多网上超级市场:Ztore
2021/01/09 全球购物
NFL官方在线商店:NFLShop
2020/07/29 全球购物
是什么让J2EE适合用来开发多层的分布式的应用
2015/01/16 面试题
教师年终个人自我评价
2013/10/04 职场文书
销售工作岗位职责
2013/12/24 职场文书
学校督导评估方案
2014/06/10 职场文书
银行竞聘上岗演讲稿
2014/09/12 职场文书
基层党员群众路线教育实践活动个人对照检查材料思想汇报
2014/10/05 职场文书
2019年让高校“心动”的自荐信
2019/03/25 职场文书
Python实现Telnet自动连接检测密码的示例
2021/04/16 Python
详解Oracle数据库中自带的所有表结构(sql代码)
2021/11/20 Oracle
Python语法学习之进程的创建与常用方法详解
2022/04/08 Python