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 ...
随机推荐
- mns: Money Never Sleeps! 自己开发的一款 IDEA 插件介绍.
一边敲代码, 一边关注股票/基金行情, 还不怕同事盯到自己的屏幕! 对于一个关注股市跟基金的研发人员来说, 莫过于一天到晚写代码, 而不能及时的查看股市行情跟基金走势了吧. 写代码的时候比较容易忘记看 ...
- xshell断线解决办法
困扰了好几个月了,网上更改ssh配置文件.固定ip都不好使,终于找到xshell掉线的解决办法了 哈哈!!! 设备管理器-->网络适配器-->对应网络连接虚拟机方式,本机虚拟机桥接如图 右 ...
- Spring Cloud Alibaba 之 user服务
项目技术选型 Spring Boot Spring MVC MyBatis + 通用Mapper (官网信息https://mapperhelper.github.io/docs/) Spring C ...
- windows本地破解用户口令
实验所属系列:操作系统安全 实验对象: 本科/专科信息安全专业 相关课程及专业:信息网络安全概论.计算机网络 实验时数(学分):2学时 实验类别:实践实验类 实验目的 1.了解Windows2000/ ...
- LDA与PCA
参考: https://www.cnblogs.com/pinard/p/6244265.html https://blog.csdn.net/qq_25680531/article/details/ ...
- CodeChef-RNDRATIO Mysterious Ratio 题解
CodeChef-RNDRATIO Mysterious Ratio 题意简述: 对每个 \(1 \le i \le n\) ,随机选择一个数 \(A_i\) ,满足 \(L_i \le A_i \l ...
- linux c语言 哲学家进餐---信号量PV方法一
1.实验原理 由Dijkstra提出并解决的哲学家进餐问题(The Dinning Philosophers Problem)是典型的同步问题.该问题是描述有五个哲学家共用一张圆桌,分别坐在周围的 ...
- 第一章epoll
IO多路复用之epoll总结 1.基本知识 epoll是在2.6内核中提出的,是之前的select和poll的增强版本.相对于select和poll来说,epoll更加灵活,没有描述符限制.epoll ...
- Gin的中间件和路由分组
什么是分组 对router创建Group(就是分组), 对同一分组会拥有同一前缀和同一中间件 写法 eg: r := gin.Default() v1 := r.Group("/v1&quo ...
- rocketmq详解-[个人版]-第一章
一.消息队列概述 1.1.消息队列由来 在运维场景中,我们经常会存在如下场景:一旦出现S1异常,C1将因为S1的影响而异常(C为客户端,s为服务端) 当然可以通过添加多个S的方式,实现高可用.但这样会 ...