django对接mongodb实现数据库查询操作
2020-08-06 19:34
801 查看
最近再给客户做一个数据展示的后台操作界面,给的数据是mongo的,要知道django对mongo不是很友好,网上有说views层操作mongo数据库和操作mysql大体差不多,但是例如mysql的查询语句是下面这样查询所有的:
all = models.send.objects.all().values('party_id','party_name','party_img')
很遗憾,mongo可是做不到,他没有all(),没有value(),所以用操作mysql的方法来操作mongo是不切实际的。
补充一句,django对接mongo是不需要执行迁移的,但是model层建表还是要有的,当连接好数据库执行程序后(通过浏览器执行配置好的url),会根据models建的模生成数据库;但是如果想拿到客户给的mongo数据,model层的表名(即类名)要和拿到的collection(类似于mysql的表)的名称一致,而models层的字段名要和collection内部的key值一致(因为mongo不同于mysql,其collection数据形式是key:value的形式)
整体流程如下:
- 主要目录展示:
-
展示models的建模
from mongoengine import * #mongo的模板是要继承mongoengine下Document的,而不是mysql里面的Models class article(Document): # 定义数据库中的所有字段,及拿到的客户表key值 two_level_site = StringField(max_length=32) three_level_site = StringField(max_length=32) four_level_site = StringField(max_length=32) subject = StringField(max_length=32) department = StringField(max_length=32) article_title = StringField() article_link = StringField() article_type = StringField() article_post_date = DateTimeField() insert_time = DateTimeField() article_stream = StringField() article_content = StringField() # 指明连接的数据表名 meta = {'collection':'article'}
-
views层
# 取值 def neirongView(request): if request.method == 'GET': #article是表名,这一步是拿到article的QuerySet find_neirong = article.objects #既然没有mysql的查询方法,那么就自建一个列表,用于存储取到的数据 context = [] # 将列表设置为全局变量 global context # QuerySet是需要遍历才能取到值的 for f in find_neirong: #拿到数据库的id,注意models里面并没有设置id字段,这样拿到的是mongo自动生成的objectid id = f.id #通过“对象+.”的方法拿到数据库指定key值下面的内容 #注意其中two_title是可以任意命名的,而two_level_site必须要和数据库的key一致 two_title = f.two_level_site three_title = f.three_level_site four_title = f.four_level_site lanmu = f.subject bushi = f.department title = f.article_title t_url = f.article_link t_sjlx = f.article_type date1 = f.article_post_date date2 = f.insert_time a_stream = f.article_stream # 遍历取完的值要放到一个暂时的字典中,改字典的目的是将取到的值封装成key、value的形式 #只有这样才能在界面上根据key取到其对应数据库的value值,单引号内部明明可以随意,但是后面的value是必须要和上面写的字段一致,为了更容易理解,建议我这样写 context1 = {'id':id,'two_title': two_title, 'three_title': three_title, 'four_title': four_title, 'lanmu': lanmu, 'bushi': bushi, 'title': title, 't_url': t_url, 't_sjlx': t_sjlx, 'date1': date1, 'date2': date2,'a_stream':a_stream } # context1的值会一直别覆盖(字典不允许有重复的key),所以每次遍历赋值后都要append一开始创建的context列表中 #最终context的形式为[{key:value}{key1}{value1}...{}] context.append(context1) # 最终就可以通过render渲染context到html界面取值了 return render(request,'content.html',{'context':context})
-
配置url
#主url from django.urls import path,include from apps.index import views # from apps.neirong import views urlpatterns = [ path('neirong/',include('apps.neirong.urls')), ]
#app的url from django.contrib import admin from django.urls import path,include from apps.neirong import views urlpatterns = [ path('',views.neirongView), ]
-
界面取值
{% for i in context %} <tr> <td >{{ i.id }}</td> <td>{{ i.two_title }}</td> <td>{{ i.three_title }})</td> <td>{{ i.four_title }}</td> <td>{{ i.lanmu }}</td> <td>{{ i.bushi }}</td> <td >{{ i.title }}</td> <td scope="row"> {{ i.t_url }} </td> <td>{{ i.t_sjlx }}</td> <td>{{ i.a_stream }}</td> <td>{{ i.date1 }}</td> {# <td>2015/08/08</td>#} <td>{{ i.date2 }}</td> <td> <div role="presentation" class="dropdown"> <button class="btn btn-default dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false"> 操作<span class="caret"></span> </button> <ul class="dropdown-menu"> <li><a href="#">编辑</a></li> <li><a href="#">删除</a></li> <li><a href="#">全局置顶</a></li> </ul> </div> </td> </tr> {% endfor %}
-
运行查看结果:
如果对您有帮助,赏口饭吃❤谢谢老板❤
相关文章推荐
- Django操作NOSQL(MongoDB)数据库
- JDBC实现数据库的几种基本操作(查询,分页查询,根据关键字进行查询以及插入数据)
- 如何用一张JSP页面连接数据库,实现查询、修改操作
- Mybatis操作数据库实现单表/多表查询流程
- MongoDB创建表步骤,Mongo常用的数据库操作命令,查询,添加,更新,删除_MongoDB 性能监测
- python2.0_day19_充分使用Django_form实现前端操作后台数据库
- spring jdbctemplate 实现数据库的查询操作
- bboss persistent 实现数据库查询操作
- JAVA对数据库进行操作,实现数据库中数据的插入,查询,更改,删除操作
- django 操作mongoDB Mongoengine教程(3)——数据查询
- Django - 与 Mysql 结合的 基本配置操作 并实现查询功能
- MongoDB创建表步骤,Mongo常用的数据库操作命令,查询,添加,更新,删除_MongoDB 性能监测
- MyBatis学习笔记-01.MyBatis简单入门_实现MyBatis对数据库的查询操作以及IllegalArgumentException异常问题
- Django实现数据库事务操作
- JAVA对数据库进行操作,实现数据库中数据的插入,查询,更改,删除操作
- mongodb查询语句及mongoose操作数据库总结
- 【NOSQL】非关系型数据库MongoDB ( 通过samus驱动实现基本数据操作 )
- c#通过操作mongodb gridfs实现文件的数据库存储
- python操作mongodb根据_id查询数据的实现方法
- jdbc操作数据库实现查询产品、增加产品库存量例子