MongoEngine模块
今儿,接到老的的要求,要把新功能的数据存放在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模块的更多相关文章
- Django 通过 mongoengine 连接 MongoDB 进而使用orm进行CRUD
一. 在python脚本中, 我们通常可以使用pymongo模块实现与mongodb数据库的交互, 但是在使用Django框架进行定制开发的web server 项目中, 仍然使用pymongo模块的 ...
- django连接mongodb mongoengine
优点 MongoEngine (http://mongoengine.org)1. 提供了和 Django 原生 ORM 几乎一样的一切,功能已经相当强大;2. 用起来比 Django 原生 ORM ...
- python 第三方模块 转 https://github.com/masterpy/zwpy_lst
Chardet,字符编码探测器,可以自动检测文本.网页.xml的编码. colorama,主要用来给文本添加各种颜色,并且非常简单易用. Prettytable,主要用于在终端或浏览器端构建格式化的输 ...
- mongoengine连接错误:“False is not a read preference”解决方法
问题出现: Mongoengine是一个可以操作MongoDB数据库的对象-文档映射器(Object-Document Mapper).出于工作需要,最近在使用MongoDB+Django实现一个数据 ...
- 源码阅读之mongoengine(0)
最近工作上用到了mongodb,之前只是草草了解了一下.对于NoSQL的了解也不是太多.所以想趁机多学习一下. 工作的项目直接用了pymongo来操作直接操作mongodb.对于用惯了Djongo O ...
- 类装饰器,元类,垃圾回收GC,内建属性、内建方法,集合,functools模块,常见模块
'''''''''类装饰器'''class Test(): def __init__(self,func): print('---初始化---') print('func name is %s'%fu ...
- python模块大全
python模块大全2018年01月25日 13:38:55 mcj1314bb 阅读数:3049 pymatgen multidict yarl regex gvar tifffile jupyte ...
- Python中使用MongoEngine
pymongo来操作MongoDB数据库,但是直接把对于数据库的操作代码都写在脚本中,这会让应用的代码耦合性太强,而且不利于代码的优化管理 一般应用都是使用MVC框架来设计的,为了更好地维持MVC结构 ...
- python基础整理4——面向对象装饰器惰性器及高级模块
面向对象编程 面向过程:根据业务逻辑从上到下写代码 面向对象:将数据与函数绑定到一起,进行封装,这样能够更快速的开发程序,减少了重复代码的重写过程 面向对象编程(Object Oriented Pro ...
随机推荐
- Java基础系列-单例的7种写法
原创文章,转载请标注出处:https://www.cnblogs.com/V1haoge/p/10755322.html 一.概述 Java中单例有7种写法,这个是在面试中经常被问到的内容,而且有时候 ...
- eclipse配置NS3
配置环境
- 【Kata Daily 190910】Who likes it?(谁点了赞?)
题目: Description: You probably know the "like" system from Facebook and other pages. People ...
- PHP修改css文件中的背景图片并下载到本地
扒网站当中一般css中的图片扒不下来,这个脚本就是用来下载这些图片到本地的 流程 1.获取css文件路径 2.打开文件逐行读取判断是否包含需要的图片 2.1 包含则 -进行截取直接获取到相对路径 2. ...
- 服务网格istio概念应知应会
一.背景 最近架构组基于istio开发了服务网格(Service Mesh)平台,借此机会把相关的背景知识做一次学习和记录,方便回头查看. 初版的效果: 二.istio 官方手册:https://is ...
- K最邻近分类
最邻近分类是分类方法中比较简单的一种,下面对其进行介绍 1.模型结构说明 最邻近分类模型属于"基于记忆"的非参数局部模型,这种模型并不是立即利用训练数据建立模型,数据 ...
- 头秃了,二十三张图带你从源码了解Spring Boot 的启动流程~
持续原创输出,点击上方蓝字关注我 目录 前言 源码版本 从哪入手? 源码如何切分? 如何创建SpringApplication? 设置应用类型 设置初始化器(Initializer) 设置监听器(Li ...
- go get以后下载的包不在src下而在pkg的问题
我的GOPATH是这样的 但是当我go get下载包之后 下载的却不在src,而是在 $GOPATH$/pkg 下 原因可能是之前第一次go get下载, GitHub的速度太慢了,我更改了代理,使用 ...
- [LeetCode题解]876. 链表的中间结点 | 快慢指针
解题思路 使用快慢指针.这里要注意的是,while 的条件会影响当中间节点有两个时,slow 指向的是第一个,还是第二个节点. // 返回的是第一个 while(fast.next != null & ...
- API的使用(3)Arrays 类,Math类,三大特性--继承
Arrays类 概述 java.util.Arrays此时主要是用来操作数组,里面提供了很多的操作API的方法.如[排序]和[搜索]功能.其所有的方法均为静态方法,调用起来非常简单. 操作数组的方 ...