社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Django

djongo:Django和MongoDB连接器

Python中文社区 • 7 年前 • 1100 次点击  

CodingGo技术社区
自由的编程学习平台

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

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

用法

1.pip install djongo

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

  1. DATABASES = {

  2.       'default': {

  3.           'ENGINE': 'djongo',

  4.           'NAME': 'your-db-name',

  5.       }

  6.   }

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

4.完成。

要求:

1.Python3.6及以上版本

2.MongoDB 3.4及以上版本

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

  1. inner_qs = Blog.objects.filter(name__contains='Ch').values('name')

  2. entries = Entry.objects.filter(blog__name__in=inner_qs)

需要MongoDB3.6及以上版本。

如何工作?

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

Django的服务模块:

  1. 'django.contrib.admin',

  2. 'django.contrib.auth',    

  3. 'django.contrib.sessions',

其它的也全都支持。

Django中用法

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

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

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

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

  1. fromdjongo import models

  2. class Blog(models.Model):

  3. name = models.CharField(max_length=100)

  4. tagline = models.TextField()

  5. class Meta:

  6. abstract = True

  7. 然后通过EmbeddedModelFieldBlog嵌入Entry 中:

  8. class Entry(models.Model):

  9. blog = models.EmbeddedModelField(

  10. model_container=Blog,

  11.    )

  12. headline = models.CharField(max_length=255)

  13. admin.py注册Entry

  14. fromdjango.contrib import admin

  15. from .models import Entry

  16. admin.site.register(Entry)

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

查询嵌入的数据字段

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

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

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

Djongo管理器

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

  1. class Entry(models.Model):

  2. blog = models.EmbeddedModelField(

  3. model_container=Blog,

  4.    )

  5. headline = models.CharField(max_length=255)

  6. objects = models .DjongoManager()

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

对Pymongo直接操作

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

  1. classEntryView(DetailView):

  2. defget_object(self, queryset=None):

  3. index = [i for i in Entry.objects.mongo_aggregate([

  4.            {

  5.                '$match': {

  6.                    'headline': self.kwargs['path']

  7.                }

  8.            },

  9.        ])]

  10. return index

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

 

▼ 点击下方阅读原文参加课程

网易云课堂《Python Web开发实战》


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/d9Nk9lTCKv
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/9826
 
1100 次点击