前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >djongo:Django和MongoDB连接器

djongo:Django和MongoDB连接器

作者头像
Python中文社区
发布2018-07-26 17:20:40
1.7K0
发布2018-07-26 17:20:40
举报

作者:小江,python爱好者,自学中,尝试爬虫、Django开发以及大数据,非CS科班出身。在校主要用MATLAB,现工作中偶尔使用python。博客主页:http://www.cae-space.cn/

在Django项目中使用MongoDB作为后端数据库,且不改变Django的ORM框架。实现Django用户管理程序对MongoDB数据库中文件的增加和修改。

用法

1.pip install djongo

2.在Django项目下的setting.py中增加如下代码:

DATABASES = {
       'default': {
           'ENGINE': 'djongo',
           'NAME': 'your-db-name',
       }
   }

3.运行 manage.py makemigrations,之后运行 manage.py migrate(仅在MongoDB中第一次建立数据表的时候需要)

4.完成。

要求:

1.Python3.6及以上版本

2.MongoDB 3.4及以上版本

3.如果项目数据库中使用嵌套查询或者子查询,比如:

inner_qs = Blog.objects.filter(name__contains='Ch').values('name')
entries = Entry.objects.filter(blog__name__in=inner_qs)

需要MongoDB3.6及以上版本。

如何工作?

Djongo对Django ORM框架的改变非常小,这就意味着不会发生一些不必要的错误。它将SQL字符串查询转变为MongoDB的文件查询。至此,所有和Django相关的功能、数据库等都这样运作。

Django的服务模块:

'django.contrib.admin',
'django.contrib.auth',    
'django.contrib.sessions',

其它的也全都支持。

Django中用法

用于MongoDB的Djongo连接器确保你可以: --重新使用Django数据库/ORM框架 --同原始Django变量一起发挥作用 --事先验证你的代码 --微小的SQL JOIN操作

参考集成Django和MongoDB获取更详细的介绍。如果你的项目使用了复杂的数据库,也可以向专家获取支持。

使用Django用户管理模块添加数据文件

比如你想利用Django创建一个以MongoDB为后端数据库的博客平台。在你博客项目app/models.py文件下定义Blog数据表:

fromdjongo import models

class Blog(models.Model):
name = models.CharField(max_length=100)
tagline = models.TextField()

class Meta:
abstract = True
然后通过EmbeddedModelField将Blog嵌入Entry中:
class Entry(models.Model):
blog = models.EmbeddedModelField(
model_container=Blog,
    )

headline = models.CharField(max_length=255)
在admin.py注册Entry:
fromdjango.contrib import admin
from .models import Entry

admin.site.register(Entry)

完成设置,然后访问localhost:80000/admin/你将会看到以下结果。

查询嵌入的数据字段

在上面的例子中,我们要查询所有以Beatles开头的名字,可以使用下面的查询方法:

entries = Entry.objects.filter(blog__startswith={'name': 'Beatles'})

参考在Django中使用MongoDB数据字段获取更多的介绍。

Djongo管理器

Djongo管理器扩展了Django管理器的功能。它能够让你使用所有pymongo的API命令。可以在模型中定义类似Djongo管理器一样的自定义管理器。

class Entry(models.Model):
blog = models.EmbeddedModelField(
model_container=Blog,
    )
headline = models.CharField(max_length=255)

objects = models.DjongoManager()

管理器的使用和Djongo管理器一样: post = Entry.objects.get(pk=pkey) 将会获得一个带有主键pkey的对象。

对Pymongo直接操作

MongoDB有非常强大的查询命令,DjongoManager能够让你完全使用它。

classEntryView(DetailView):
defget_object(self, queryset=None):
index = [i for i in Entry.objects.mongo_aggregate([
            {
                '$match': {
                    'headline': self.kwargs['path']
                }
            },
        ])]
return index

你可以直接使用任何pymongo命令通过在命令名字前面加上mongo的前缀。例如,对Blogpage(Blogpage在SQL中保存为一个数据表,在MongoDB中保存为一个集合)使用aggregate,函数名变为mongoaggregate。在模型中直接插入一个文件(不是使用.save()),使用mongoinsertone() 。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-04-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python中文社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MongoDB
腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档