django对接mongodb实现数据库查询操作

最近再给客户做一个数据展示的后台操作界面,给的数据是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的形式)

整体流程如下:

  1. 主要目录展示:

在这里插入图片描述

  1. 展示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'}
    
  2. 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})
    
  3. 配置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),
    ]
    
    
  4. 界面取值

     {% 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 %}
    
  5. 运行查看结果:

在这里插入图片描述
毕设没思路看这里https://blog.csdn.net/Q893448322/article/details/107642349?spm=1001.2014.3001.5501

如果对您有帮助,赏口饭吃❤谢谢老板❤

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
MongoDB数据库中进行基本操作包括以下几个步骤: 1. 打开MongoDB数据库环境:按下键盘上的Window+R键,输入"mongo"并按下回车键。这将打开一个新的命令提示符窗口,进入MongoDB数据库环境。 2. 查看当前的数据库:在命令提示符窗口中输入"show dbs"命令,可以查看当前存在的数据库列表。 3. 切换到指定的数据库:在命令提示符窗口中输入"use <数据库名称>"命令,将当前操作数据库切换到指定的数据库。 4. 执行数据库查询操作:在命令提示符窗口中输入适当的查询命令,如"db.<集合名称>.find()",可以执行数据库的查询操作。需要替换<集合名称>为你要查询的集合的名称。 5. 查看查询结果:命令提示符窗口会返回查询结果,你可以在这里查看查询到的数据。 总结: 首先,通过按下Window+R键打开MongoDB数据库环境,并最小化该窗口。然后,在新的命令提示符窗口中输入"mongo"命令再次打开一个数据库环境。你可以使用"show dbs"命令查看当前存在的数据库,使用"use <数据库名称>"命令切换到指定的数据库,然后执行数据库查询操作,如"db.<集合名称>.find()"。查询结果将在命令提示符窗口中返回。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [mongoDB数据库的基本操作](https://download.csdn.net/download/weixin_38681286/13686149)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [老生常谈MongoDB数据库基础操作](https://download.csdn.net/download/weixin_38739044/13701106)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Django+Python+Echarts对招聘数据进行可视化分析](https://download.csdn.net/download/wchg21131/88222605)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值