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 ...
随机推荐
- Centos中部署NetCore项目(一)
前言 本文是基于centos8,dotnetcore3.1. (为了服务器安全使用,程序部署最好不要直接root账号进行操作.) 如果使用sudo命令时候,提示用户不在sudoers文件中的解决方法. ...
- 寻找性能更优秀的动态 Getter 和 Setter 方案
反射获取 PropertyInfo 可以对对象的属性值进行读取或者写入,但是这样性能不好.所以,我们需要更快的方案. 方案说明 就是用表达式编译一个 Action<TObj,TValue> ...
- 细学C++之C++语言的特点
优点: 1.强大的抽象封装能力:这让C++语言具备了强大的开发工程能力 2.高性能:运行快,并且占用资源少 3.低功耗:适合在各种微型的嵌入式设备中运行高效的程序 缺点: 1.语法相对复杂,细节比较多 ...
- 简单red5+obs推流实现直播系统开发,具体设置介绍
前言:随便搞搞,先放一张效果图,
- Module not found: Can't resolve 'bootstrap/dist/css/bootstrap-theme.css' in 'C:\react-form-validation-demo\src'
此错误是由配置错误.版本不匹配或引导安装损坏引起的.如果已经安装了引导程序和反应引导程序,则可以通过以下方式进行更改: npm install --save bootstrap@^4.0.0-al ...
- JavaScript中.、[]与setAttribute()在设置属性上的区别
.和[] javaScript.和[]既可以对所有js对象设置属性,但是对于DOM对象它设置的属性有些特殊.对于元素DOM标准属性,实现属性值的设置/更改;对于元素DOM非标准属性,仅在js中有效,在 ...
- Fastdfs集群部署以及基本操作
FastDFS引言 本地存储与分布式文件系统 本地存储的缺点: 是否有备份? 没有 成本角度? 贵 服务器 :用于计算 ---- cpu/内存 用于存储 ---- 硬盘大 存储瓶颈? 容量有限 ...
- TCP中RTT的测量和RTO的计算
https://blog.csdn.net/zhangskd/article/details/7196707 tcp传输往返时间是指:发送方发送tcp断开时, 到发送方接收到改段立即响应的所耗费的时间 ...
- C++调用Go方法的字符串传递问题及解决方案
摘要:C++调用Go方法时,字符串参数的内存管理需要由Go侧进行深度值拷贝. 现象 在一个APP技术项目中,子进程按请求加载Go的ServiceModule,将需要拉起的ServiceModule信息 ...
- gcc 去除无用程序段
嵌入式系统中,对程序尺寸要求高时,可以使用本方法 代码中,经常会有一种情况,库中并非所有函数都会用到.然而,无用的函数也最终被编译进可执行文件中了. 为避免这一情况,可以在编译时,添加选项:-ffun ...