今儿,接到老的的要求,要把新功能的数据存放在Mongo里。虽然一直都有听过Mango的鼎鼎大名,但是那也只是见过没用过,跟个小白没啥区别。在加上功能急需,没办法只能赶鸭子上架先上再说。下面这篇就是我赶紧上手Mongo的心得体会。只是最简单的用法。。。。

  说下MongoEngine,这个是在pymongo的基础上封装的类似于ORM一样的模块,让我们能快速的上手操作Mango。里面的操作和ORM基本类似,只是些许的区别需要注意。废话不多说了,是时候表演真正的技术了。

  在setting里配置数据库

  在model里建立模型类,模型类建立以后不用makemigrations和migrate同步,直接就可以使用。

# -*- coding: utf-8 -*-
import mongoengine
class OrderWarningInfo(mongoengine.Document): order_id = mongoengine.StringField(max_length=32, blank=True, null=True)
mac = mongoengine.StringField(max_length=32, blank=True, null=True)
number = mongoengine.StringField(max_length=32, blank=True, null=True)
temperature = mongoengine.StringField(max_length=32, blank=True, null=True)
scan_location = mongoengine.StringField(max_length=32, blank=True, null=True)
event = mongoengine.StringField(blank=True)
scan_time = mongoengine.DateTimeField(null=True, blank=True)
status = mongoengine.StringField(blank=True, null=True )
is_finish = mongoengine.StringField(blank=True)

  在view里想用ORM那样的使用就可以了。

warninginfos = OrderWarningInfo.objects.all().order_by("-scan_time")
warninginfos = OrderWarningInfo.objects.filter(name=name,event=event).order_by("-scan_time")
OrderWarningInfo.objects.filter(name=name,event=event).first()
OrderWarningInfo.objects.filter(name=name,event=event).distinct("name")

  写在最后的一些区别。

    1. MongoEngine里没用指定多个返回字段这一说(也就是说.values()这个方法不能用)。

    2. 对于去重的使用也少许不同。ORM里.distinct(). MongoEngine里.distint("字段名")表示只显示这一个字段并去重,返回一个list。

    3.用_id来查询数据。因为自动生成的_id是个ObjectId对象,所以如果你传过来的不是ObjectId,那么久不能直接查询。

      正确的姿势如下

 

#pymongo的版本号大于2.2,使用下面的语句导入ObjectId
from bson.objectid import ObjectId ##
#pymongo的版本号小于2.2,使用下面的语句导入ObjectId
from pymongo.objectid import ObjectId event_id = "5c0a33b0c3cdb283d2c56817" #__raw__允许MongoEngine使用原生mongo语句查询
warninginfos = OrderWarningInfo.objects.filter(__raw__={'_id': ObjectId("%s" % event_id)}).update(is_finish = "2")

工作中用到的不多,占时只能写出来一些最简单最基础的东西。MongoDB是门大学问,以后有机会还会继续整理关于Mango的文章。

  

MongoEngine模块的更多相关文章

  1. Django 通过 mongoengine 连接 MongoDB 进而使用orm进行CRUD

    一. 在python脚本中, 我们通常可以使用pymongo模块实现与mongodb数据库的交互, 但是在使用Django框架进行定制开发的web server 项目中, 仍然使用pymongo模块的 ...

  2. django连接mongodb mongoengine

    优点 MongoEngine (http://mongoengine.org)1. 提供了和 Django 原生 ORM 几乎一样的一切,功能已经相当强大;2. 用起来比 Django 原生 ORM ...

  3. python 第三方模块 转 https://github.com/masterpy/zwpy_lst

    Chardet,字符编码探测器,可以自动检测文本.网页.xml的编码. colorama,主要用来给文本添加各种颜色,并且非常简单易用. Prettytable,主要用于在终端或浏览器端构建格式化的输 ...

  4. mongoengine连接错误:“False is not a read preference”解决方法

    问题出现: Mongoengine是一个可以操作MongoDB数据库的对象-文档映射器(Object-Document Mapper).出于工作需要,最近在使用MongoDB+Django实现一个数据 ...

  5. 源码阅读之mongoengine(0)

    最近工作上用到了mongodb,之前只是草草了解了一下.对于NoSQL的了解也不是太多.所以想趁机多学习一下. 工作的项目直接用了pymongo来操作直接操作mongodb.对于用惯了Djongo O ...

  6. 类装饰器,元类,垃圾回收GC,内建属性、内建方法,集合,functools模块,常见模块

    '''''''''类装饰器'''class Test(): def __init__(self,func): print('---初始化---') print('func name is %s'%fu ...

  7. python模块大全

    python模块大全2018年01月25日 13:38:55 mcj1314bb 阅读数:3049 pymatgen multidict yarl regex gvar tifffile jupyte ...

  8. Python中使用MongoEngine

    pymongo来操作MongoDB数据库,但是直接把对于数据库的操作代码都写在脚本中,这会让应用的代码耦合性太强,而且不利于代码的优化管理 一般应用都是使用MVC框架来设计的,为了更好地维持MVC结构 ...

  9. python基础整理4——面向对象装饰器惰性器及高级模块

    面向对象编程 面向过程:根据业务逻辑从上到下写代码 面向对象:将数据与函数绑定到一起,进行封装,这样能够更快速的开发程序,减少了重复代码的重写过程 面向对象编程(Object Oriented Pro ...

随机推荐

  1. Docker(10)- docker create 命令详解

    如果你还想从头学起 Docker,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1870863.html 作用 创建一个新的容器但不启动它 ...

  2. C++在C的基础上改进了哪些细节

    C++ 是在C语言的基础上改进的,C语言的很多语法在 C++ 中依然广泛使用,例如:  C++ 仍然使用 char.short.int.long.float.double 等基本数据类型:   ...

  3. 一些bug

    长期留坑 1.AC自动机多模式串匹配问题 对于要统计各个模式串在文本中的出现次数,对于每个当前节点不能直接暴力跳$fail$ 复杂可以退化到$O(n^2)$ $aaaaaa--aaa$可以卡掉 要将$ ...

  4. C# 全局唯一标识符 (GUID)

    一 C#  全局唯一标识符 (GUID) Represents a globally unique identifier (GUID). To browse the .NET Framework so ...

  5. leetcode144 longest-palindromic-substring

    题目描述 找出给出的字符串S中最长的回文子串.假设S的最大长度为1000,并且只存在唯一解. Given a string S, find the longest palindromic substr ...

  6. Java实现FTP跨服务器文件操作

    在过去的几年工作中,曾经多次需要把文件上传到单独的服务器,而程序是在单独的服务器上部署的,在进行文件操作的时候就需要跨服务器进行操作包括:文件上传.文件下载.文件删除等.跨服务器文件操作一般是需要FT ...

  7. EMP-面向未来微前端方案正式开源了!

    原文团队掘金平台:https://juejin.im/post/6891532248269783054 EMP项目github链接: https://github.com/efoxTeam/emp E ...

  8. Java web项目 上传图片保存到数据库,并且查看图片,(从eclipse上移动到tomact服务器上,之路径更改,包括显示图片和导出excel)

    //项目做完之后,在本机电脑运行完全正常,上传图片,显示图片,导出excel,读取excel等功能,没有任何问题,但是,当打成war包放到服务器上时,这些功能全部不能正常使用. 最大的原因就是,本机测 ...

  9. elasticsearch集群安装+安全验证+kibana安装

    准备环境 启动4个centos容器, 并暴露相对应端口 (我的本机ip为172.16.1.236,以下涉及到的地方需要修改为自己的ip) node_name ip http port transpor ...

  10. Redis未授权访问漏洞复现与利用

    漏洞简介 Redis默认情况下,会绑定在0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源ip访问等,这样将会将Redis服务暴露到公网上,如果在没有设置密码认 ...