mongoengine 使用笔记

python mongoengine 使用 阅读详情

mongoengine使用笔记

Sat 23 June 2012

最近重新拾起Django,但是Django并不支持mongodb,但是有一个模块mongoengine可以实现Django Model类似的封装.但是mongoengine的中文文档几乎没有,有的也是简短的几句介绍和使用.下面我就分享一下我在使用过程中所记录下的一些笔记,可能有点乱.大家可以参考一下.

安装mongoengine

easy_install pymongo # 依赖库
easy_install mongoengine

基本使用

from mongoengine import *
from datetime import datetime
# 连接数据库
connect('blog')   # 连接本地blog数据库
# 如需验证和指定主机名
# connect('blog', host='192.168.3.1', username='root', password='1234')

# 定义分类文档
class Categories(Document):
    ' 继承Document类,为普通文档 '
    name = StringField(max_length=30, required=True)
    artnum = IntField(default=0, required=True)
    date = DateTimeField(default=datetime.now(), required=True)

和Django的model使用很类似,所以也不解释什么.

插入

cate = Categories(name="Linux")   # 如果required为True则必须赋予初始值,如果有default,赋予初始值则使用默认值
cate.save() # 保存到数据库

查询和更新

文档类有一个 objects 属性.我们使用它来查询数据库.

# 返回集合里的所有文档对象的列表
cate = Categories.objects.all()

# 返回所有符合查询条件的结果的文档对象列表
cate = Categories.objects(name="Python")
# 更新查询到的文档:
cate.name = "LinuxZen"
cate.update()
查询数组 默认查询数组"="代表的意思是in:
class Posts(Document):
    artid = IntField(required=True)
    title = StringField(max_length=100, required=True)
    content = StringField(required=True)
    author = ReferenceField(User)
    tags = ListField(StringField(max_length=20, required=True), required=True)
    categories = ReferenceField(Categories), required=True)
    comments = IntField(default=0, required=True)

# 将会返回所有tags包含coding的文档
Posts.objects(tags='coding')

ReferenceField 引用字段:

通过引用字段可以通过文档直接获取引用字段引用的那个文档:

class Categories(Document):
    name = StringField(max_length=30, required=True)
    artnum = IntField(default=0, required=True)
    date = DateTimeField(default=datetime.now(), required=True)

class Posts(Document):

    title = StringField(max_length=100, required=True)
    content = StringField(required=True)
    tags = ListField(StringField(max_length=20, required=True), required=True)
    categories = ReferenceField(Categories)
插入引用字段
cate =Categories(name="Linux")
cate.save()
post = Posts(title="Linuxzen.com", content="Linuxzen.com",tags=["Linux","web"], categories=cate)
post.save()
通过引用字段直接获取引用文档对象

一般文档查询会返回一个列表(尽管只有一个结果),我们想要获得一个文档对象可以使用索引获取第一个文档对象,但是mongoengine建议使用first()来获取第一个:

>>> cate = Posts.objects.all().first().categories
>>> cate

>>> cate.name
u'Linux'

查询包含Linux分类的文章

>>> cate = Categories.objects(name="Linux").first()
>>> Posts.objects(categories=cate)

EmbeddedDocument 嵌入文档

继承EmbeddedDocument的文档类就是嵌入文档,嵌入文档用于嵌入其他文档的EmbeddedDocumentField 字段,比如上面例子的tags字段如果改成嵌入文档的话可以将Posts文档类改成如下方式:

class Posts(Document):

    title = StringField(max_length=100, required=True)
    content = StringField(required=True)
    tags = ListField(EmbeddedDocumentField('Tags')required=True)
    categories = ReferenceField(Categories)

还需要添加一个Tags嵌入文档类:

class Tags(EmbeddedDocument):
name = StringField()
date = DateTimeField(default=datetime.now())

我们像如下方式插入Posts文档中的Tags

>>> tag = Tags(name="Linuxzen")
>>> post = Posts(title="Linuxzen.com", content="Linuxzen.com", tags=[tag], categories=cate)
>>> tag = Tags(name="mysite")
>>> post.tags.append(tag)
>>> post.save()
>>> tags = post.tags
>>> for tag in tags:
print tag.name

Linuxzen
mysite

时间段查询

    start = datetime(int(year), int(month), 1)
    if int(month) + 1 > 12:
        emonth = 1
        eyear = int(year) + 1
    else:
        emonth = int(month) + 1
        eyear = int(year)
    end = datetime(eyear, emonth, 1)
    articles = Posts.objects(date__gte=start, date__lt=end).order_by('-date')

分片

slice用于分片

# comments - skip 5, limit 10
Page.objects.fields(slice__comments=[5, 10])

# 也可以使用索引值分片

# limit 5
users = User.objects[:5]

# skip 5
users = User.objects[5:]

# skip 10, limit 15
users = User.objects[10:15]

使用原始语句查询

如果想使用原始的pymongo查询方式可以使用__raw__操作符 Page.objects(raw={'tags':'coding'})使用$inc和$set操作符

# 更新嵌入文档comments字段by的值为joe的文档字段votes增加1
Page.objects(comments_by="joe").update(inc__votes=1)

# 更新嵌入文档comments字段by的值为joe的文档字段votes设置为1
Page.objects(comments_by="joe").update(set__votes=1)

其他技巧

#查询结果转换成字典
users_dict = User.objects().to_mongo()

# 排序,按日期排列
user = User.objects.order_by("date")

# 按日期倒序

user = User.objects.order_by("-date")



Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a>
MongoEngine中文文档 一、简介: MongoEngine是一个基于pymongo开发的ODM库,对应与SQLAlchemy。同时,在MongoEngine基础上封装了Flask-MongoEngine,用于支持flask框架。 ⚠️注:本文内容来自官方文档(地址:http://docs.mongoengine.org/index.html ) 二、入门教程 1、【安装MongoEngine】 pip3 install mongoengine ⚠️注:安装python3.x时自动安装pip3工具 2、【链接至MongoDB】 2. 阅读详情

相关推荐

在Python中使用mongoengine操作MongoDB教程

主要介绍了在Python中使用mongoengine操作MongoDB教程,包括在Django下的一些使用技巧,需要的朋友可以参考下

mongoengine

最近重新拾起Django,但是Django并不支持mongodb,但是有一个模块mongoengine可以实现Django Model类似的封装.但是mongoengine的中文文档几乎没有,有的也是简短的几句介绍和使用.下面我就分享一下我在使用过程中所记录下的一些笔记,可能有点乱.大家可以参考一下. 安装mongoengine easy_install pymongo # 依赖库 e

bugall的专栏 2109

Veristand自动化测试:Stimulus Profile Editor实战指南

本文是Veristand自动化测试中Stimulus Profile Editor的实战指南。详细介绍了如何利用这一图形化工具,将繁琐的手动测试流程转化为一键自动执行的“剧本”,涵盖工程控制、信号编程、预制动作调用等核心功能,并通过手把手案例演示了构建首个自动化测试脚本的全过程,帮助测试工程师显著提升效率与可靠性。

dd012的博客 492

Python Web 7 —— python调用mongodb优化,使用mongoengine

前言:         上一篇文章中我们详细阐述了如何在python中使用pymongo来操作mongodb数据库,但是直接把对于数据库的操作代码都写在脚本中,显然会让应用的代码耦合性太强,而且不利于代码的优化管理,一般应用都是使用MVC框架来设计的,为了更好地维持MVC结构,我们需要把数据库操作部分作为model抽离出来,这就需要借助MongoEngine,这是一个可以操作MongoDB数据库

linshuhe1的专栏 3411

手把手带你搞懂电压跌落测试DIP

砖一用4分钟时间手把手带你搞懂电压跌落测试DIP,希望对你有用~

qq_45508321的博客 7916

linux 4.19在龙芯平台上编译出错解决方法

OS: Loongnix server 1.7 工具链为:系统自带的gcc-4.8.5 和 gcc-7.3 平台:3A3000/3A4000 源码:kernel: 4.19 编译步骤 ··· make loongson3_defconfig make -j4 ··· 出错信息: HOSTCC arch/mips/boot/compressed/calc_vmlinuz_load_addr arch/mips/boot/compressed/head.S: Assembler messages: arch/m

sense的专栏 1124

一文带你深入浅出 MongoEngine 经典查询【内附详细案例】

一、数据库数据示例 二、 查询数据库(所有) 三、 过滤查询(单个、条件) 1. 查单个 2. 可用的过滤查询运算符 3. 过滤查询运算符使用示范 四、字符串查询(模糊) 1. 可用的模糊查询运算符 2. 模糊查询运算符使用示范 五、原始查询 ( _ _ raw _ _ ) 1. 原始查询详解 2. 原始查询示例 六、排序 / 排序结果( +、- ) 七、限制和跳过结果( [ ]、first() ) 八、计数结果 九、聚合查询

HHX_01的博客 2765

HFSS仿真平行线定向耦合器学习笔记

材料:FR4(玻璃纤维环氧树脂),介电常数:4.4,损耗角正切:0.02,厚度0.8mm。扫频方式:快速扫频,扫频范围:1.0GHz~3.0GHz,步进:0.01GHz。端口2是端口1关于Y轴对称,端口3,端口4是端口1和端口2关于X轴对称得到。求解中心频率:2.0GHz,迭代次数:20,收敛误差为0.02。右键设置边界条件----辐射边界。激励方式:集总端口激励。

qq_36521926的博客 4485

MongoEngine文档—高级用法

MongoEngine不为人知的方法 之前发了个博客写的是MongoEngine的入门文档,在清楚了建表的字段类型,学会如何查询之后,我们来聊聊MongoEngine不常用但很有用的其他方法。 文章目录MongoEngine不为人知的方法1.get查询容错2.with_id使用3.filter中字符查询-contains使用4.不包含查询5.list转querySet6.querySet转di...

宅神的博客 1万+

如何正确的计算两个角度的角度差?

这一步是必要的,因为它确保了无论a相对于b是在逆时针方向还是顺时针方向,d2总是正确地反映出绕圆相反方向的角度差。这样,当函数进行最后的比较时,它能够准确地比较两个方向的旋转路径并选择最短的一个。

小秋 AI SLAM 入门实战教程 4135

高通SDX35平台 modem启动异常分析

SDX35 MIFI项目在生产时出现modem反复重启问题。经排查发现是modem在初始化GNSS模块时访问了不存在的硬件地址导致崩溃,原因是产线使用的SDX35 000-AB型号芯片阉割了GNSS功能,而本地测试使用的AA型号支持该功能。解决方案是通过修改modem编译选项,采用高通新提供的genlmm2选项(保留IMS和SMS功能但去除GNSS支持),最终解决了启动异常问题并满足VZW认证需求。

四儿家的小祖宗的博客 273

MongoEngine 操作笔记一

MongoEngine 操作 笔记一 本文主要讲述通过python3,Flask使用mongoEngine,进行数据模型的建立: 1. 安装相关库 pip3 install flask, mongoengine 2. 引入依赖 from flask import Flask from flask_mongoengine import MongoEngine 3. 连...

wmh13262227870的博客 2290

AI 测试工程师 — 6 个月学习计划表

AI 转型测试工程师 —— 6 个月学习计划表

weixin_46453070的博客 1067

Mongoengine 使用笔记

1.直接将某个document对象导出对应的json数据. #models class Feed(Document): """ @summary: 所有订阅内容 """ keywords = StringField(default='') job_type = StringField(default='') # 工作类型 t...

weixin_30640291的博客 186

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

mongoengine 学习 笔记

一边做项目,一边做笔记的。这习惯不好,做项目的时候,不酣畅,但我 一做完项目就忘了,其中的想法。回头也找不出头绪了。 1:  创建model (整个项目的部署 如同django) 有:setting,url,model,views import mongoengine as modelsclass Project(models.Document): pass ...

weixin_30809173的博客 211

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

MongoEngine 使用教程

MongoEngine 使用教程 1、项目介绍 MongoEngine 是一个用于 MongoDB 的 Python 对象文档映射器(ODM)。它提供了一种方便的方式来与 MongoDB 数据库进行交互,将 Python 类映射到 MongoDB 文档,并提供了丰富的查询接口和文档验证功能。 MongoEngine 支持多个 MongoDB 版本,包括 v3.6、v4.0、v4.4、v5.0、v6...

gitblog_01123的博客 1080

MongoEngine安装和使用

上节我写了pymongo操作MongoDB数据库的博客,这节我们来讲解mongoengine的使用方法mongoengine的介绍和安装:     MongoEngine is an Object-Document Mapper, written in Python for working with MongoDB.To install it, simply run $pip install -U...

you are sherlocked by me! 3301

mongoengine使用

1.初始化连接如果我们的MongoDB 是直接在本地电脑上面运行的,可以使用以下代码来连接到电脑上的MongoDB数据库:from mongoengine import * connect(‘数据库名’) 如果MongoDB不是运行在本地电脑上面的,就需要指定ip 地址和端口:from mongoengine import * connect(‘数据库名’, host=’192.168.2.12’

Jason chen的鲸鱼 2099

mongoengine的使用

本文摘自https://blog.youkuaiyun.com/xc_zhou/article/details/80837962 如有侵权,请联系删除 pymongo的弊端 pymongo来操作mongodb数据库,但是直接把数据库的操作代码写在脚本中,使得应用代码的耦合性太强,不利于代码的优化管理 mongoengine是一个对象文档映射器(ODM),相当于基于sql对象关系映射...

weixin_30832351的博客 485

MongoEngine使用

前言 MongoEngine其实是一个ORM框架,像django有自身的ORM,但是当你使用flask或者仅仅是需要使用MongoDB,MongoEngine就是一个高效的选择。官方文档,下载什么的这边就不加以赘述了,就是讲一下简单使用,老四样——增删查改。。 具体使用 类定义 首先要对MongoDB中的集合属性进行定义。 首先需要声明所属的集合collection 要注意的是类必须包含集合中所有的属性,如A有field1、field2,B有field2、field3,则这个类需要包含这三个field。

717

Flask框架——MongoEngine使用MongoDB数据库

上篇文章我们学习了Flask框架——Bootstrap-Flask使用,这篇文章我们学习Flask框架——MongoEngine使用MongoDB数据库。

霖hero 3274

Mongoengine基础教程

Mongoengine基础教程 文章目录`Mongoengine`基础教程安装连接文档定义查询文档验证`GridFS``Signal`参考文献 安装 方法一:pip安装 python -m pip install mongoengine 方法二:github源码安装 git clone git://github.com/mongoengine/mongoengine cd mongoengine python setup.py install 连接 本地连接 from mongoen

qq_43373298的博客 2106

探索 Flask-MongoEngine:Python Web 开发的新里程碑

是一个强大的扩展,它将 [MongoDB](https://www.mongodb.com/) 数据库与轻量级的 Python web 框架 [Flask](http://flask.pocoo.org/) 结合在了一起。这个项目的出现为开发者提供了一个易于使用的接口,以便在 Flask 应用中集成非关系型(NoSQL)数据库。本文将深入介绍 Flask-MongoEngine 的核心特性、技术分

gitblog_00074的博客 692

MongoEngine

MongoEngine 提供 connect() 函数来连接到正在运行的 mongodb 服务器实例。默认情况下,MongoDB 服务器在本地主机和端口 27017 上运行。如果要自定义,您应该向 connect() 提供主机和端口参数 −如果数据库需要身份验证,则应提供凭据,例如用户名、密码和 authentication_source 参数。MongoEngine 还支持 URI 样式连接而不是 IP 地址。MongoEngine 还允许连接多个数据库。您需要为每个数据库提供唯一的别名。

LLLMY123的博客 576
上一篇: Python3 操作系统与路径 模块(os / os.path / pathlib)
下一篇: CentOS 7 安装 MySQL
SmallTankPy
博客等级 码龄10年 26粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值