使用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之集合(set)
Sep 24 Python
Python运用于数据分析的简单教程
Mar 27 Python
python入门基础之用户输入与模块初认识
Nov 14 Python
使用python脚本实现查询火车票工具
Jul 19 Python
解决使用PyCharm时无法启动控制台的问题
Jan 19 Python
在Python中,不用while和for循环遍历列表的实例
Feb 20 Python
python实现微信机器人: 登录微信、消息接收、自动回复功能
Apr 29 Python
详解Python Matplotlib解决绘图X轴值不按数组排序问题
Aug 05 Python
python redis 批量设置过期key过程解析
Nov 26 Python
python针对Oracle常见查询操作实例分析
Apr 30 Python
python编写softmax函数、交叉熵函数实例
Jun 11 Python
Flask-SocketIO服务端安装及使用代码示例
Nov 26 Python
python自动计算图像数据集的RGB均值
详解如何用Python实现感知器算法
python中24小时制转换为12小时制的方法
Jun 18 #Python
用Python selenium实现淘宝抢单机器人
python中pandas对多列进行分组统计的实现
python 常用的异步框架汇总整理
Jun 18 #Python
Opencv中cv2.floodFill算法的使用
You might like
封装一个PDO数据库操作类代码
2009/09/09 PHP
php 计算两个时间戳相隔的时间的函数(小时)
2009/12/18 PHP
PHP中10个不常见却非常有用的函数
2010/03/21 PHP
PHP+Mysql+jQuery实现发布微博程序 jQuery篇
2011/10/08 PHP
PHP中的生成XML文件的4种方法分享
2012/10/06 PHP
php、java、android、ios通用的3des方法(推荐)
2016/09/09 PHP
PHP遍历目录文件的常用方法小结
2017/02/03 PHP
autoPlay 基于jquery的图片自动播放效果
2011/12/07 Javascript
js 通过html()及text()方法获取并设置p标签的显示值
2014/05/14 Javascript
js数值计算时使用parseInt进行数据类型转换(jquery)
2014/10/07 Javascript
JS中产生标识符方式的演变
2015/06/12 Javascript
PageSwitch插件实现100种不同图片切换效果
2015/07/28 Javascript
jquery实现在网页指定区域显示自定义右键菜单效果
2015/08/25 Javascript
Bootstrap的图片轮播示例代码
2015/08/31 Javascript
动态创建按钮的JavaScript代码
2016/01/29 Javascript
JavaScript使用Range调色及透明度实例
2016/09/25 Javascript
Centos7 中 Node.js安装简单方法
2016/11/02 Javascript
Vue 2.0+Vue-router构建一个简单的单页应用(附源码)
2017/03/14 Javascript
浅谈vue实现数据监听的函数 Object.defineProperty
2017/06/08 Javascript
js获取地址栏参数的两种方法
2017/06/27 Javascript
简单谈谈JS中的正则表达式
2017/09/11 Javascript
解决LayUI表单获取不到data的问题
2018/08/20 Javascript
基于jQuery ztree实现表格风格的树状结构
2018/08/31 jQuery
[08:54]《一刀刀一天》之DOTA全时刻18:十九支奔赴西雅图队伍全部出炉
2014/06/04 DOTA
压缩包密码破解示例分享(类似典破解)
2014/01/17 Python
python去掉字符串中重复字符的方法
2014/02/27 Python
python中数据爬虫requests库使用方法详解
2018/02/11 Python
Python3之字节串bytes与字节数组bytearray的使用详解
2019/08/27 Python
python实现飞机大战游戏(pygame版)
2020/10/26 Python
使用Python实现批量ping操作方法
2020/05/06 Python
详解Python的爬虫框架 Scrapy
2020/08/03 Python
python解包概念及实例
2021/02/17 Python
澳大利亚运动鞋零售商:The Athlete’s Foot
2018/11/04 全球购物
运动会表扬稿大全
2014/01/16 职场文书
2014年党风廉政工作总结
2014/12/03 职场文书
幼儿教师远程研修感悟
2015/11/18 职场文书