djongo:Django和MongoDB连接器

火山方舟向量数据库云通信

picture.image

CodingGo技术社区

自由的编程学习平台

picture.image

作者:小江, 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. 
3. `class Blog(models.Model):`
4. `name = models.CharField(max_length=100)`
5. `tagline = models.TextField()`
6. 
7. `class Meta:`
8. `abstract = True`
9. `然后通过EmbeddedModelField将Blog嵌入Entry中:`
10. `class Entry(models.Model):`
11. `blog = models.EmbeddedModelField(`
12. `model_container=Blog,`
13. `)`
14. 
15. `headline = models.CharField(max_length=255)`
16. `在admin.py注册Entry:`
17. `fromdjango.contrib import admin`
18. `from .models import Entry`
19. 
20. `admin.site.register(Entry)`


    

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

picture.image

查询嵌入的数据字段

在上面的例子中,我们要查询所有以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. 
7. `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() 。

picture.image

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

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

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
KubeZoo: 轻量级 Kubernetes 多租户方案探索与实践
伴随云原生技术的发展,多个租户共享 Kubernetes 集群资源的业务需求应运而生,社区现有方案各有侧重,但是在海量小租户的场景下仍然存在改进空间。本次分享对现有多租户方案进行了总结和对比,然后提出一种基于协议转换的轻量级 Kubernetes 网关服务:KubeZoo,该方案能够显著降低多租户控制面带来的资源和运维成本,同时提供安全可靠的租户隔离性。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论