mongoengine,一个非常实用的 Python 库!

e4f9f51b3c1a03a3e5df02d94de6b8b5.png

更多Python学习内容:ipengtao.com

大家好,今天为大家分享一个超酷的 Python 库 - mongoengine。

Github地址:https://github.com/MongoEngine/mongoengine


在现代应用程序开发中,NoSQL数据库因其灵活性和高性能而广受欢迎。MongoDB作为一种流行的NoSQL数据库,被广泛应用于各种项目中。Python的mongoengine库是一个对象文档映射(ODM)工具,旨在简化与MongoDB的交互。它提供了类似ORM(对象关系映射)的功能,使开发者能够以面向对象的方式操作MongoDB中的文档。本文将详细介绍mongoengine库,包括其安装方法、主要特性、基本和高级功能,以及实际应用场景,帮助全面了解并掌握该库的使用。

安装

要使用mongoengine库,首先需要安装它。可以通过pip工具方便地进行安装。

以下是安装步骤:

pip install mongoengine

安装完成后,可以通过导入mongoengine库来验证是否安装成功:

import mongoengine
print("mongoengine库安装成功!")

特性

  1. 对象文档映射(ODM):提供类似ORM的功能,使开发者能够以面向对象的方式操作MongoDB。

  2. 支持复杂查询:支持复杂的查询操作,包括过滤、排序和聚合等。

  3. 验证和约束:支持字段验证和约束,确保数据的完整性和一致性。

  4. 关系管理:支持文档之间的关系,包括嵌入文档和引用文档。

  5. 灵活的数据模型:支持动态和静态的数据模型定义。

基本功能

连接MongoDB

使用mongoengine库,可以方便地连接到MongoDB。

以下是一个简单的示例:

import mongoengine

# 连接到本地的MongoDB
mongoengine.connect('example_db')
print("连接到MongoDB成功")

定义文档模型

mongoengine库使用文档模型来映射MongoDB中的集合。

以下是一个定义文档模型的示例:

import mongoengine

class User(mongoengine.Document):
    name = mongoengine.StringField(required=True)
    age = mongoengine.IntField()

print("文档模型定义成功")

插入数据

mongoengine库提供了简单的方法来插入数据。

以下是一个插入数据的示例:

# 创建新用户
user = User(name='Alice', age=30)
user.save()
print("数据插入成功")

查询数据

mongoengine库提供了强大的查询功能。

以下是一个查询数据的示例:

# 查询所有用户
users = User.objects()
for user in users:
    print(user.name, user.age)

高级功能

更新数据

mongoengine库支持数据的更新操作。

以下是一个更新数据的示例:

# 更新用户数据
user = User.objects(name='Alice').first()
user.update(age=31)
print("数据更新成功")

删除数据

mongoengine库支持数据的删除操作。

以下是一个删除数据的示例:

# 删除用户数据
user = User.objects(name='Alice').first()
user.delete()
print("数据删除成功")

嵌入文档

mongoengine库支持嵌入文档,以下是一个嵌入文档的示例:

class Address(mongoengine.EmbeddedDocument):
    street = mongoengine.StringField(required=True)
    city = mongoengine.StringField(required=True)

class User(mongoengine.Document):
    name = mongoengine.StringField(required=True)
    age = mongoengine.IntField()
    address = mongoengine.EmbeddedDocumentField(Address)

# 创建新用户并嵌入地址
address = Address(street='123 Main St', city='New York')
user = User(name='Bob', age=25, address=address)
user.save()
print("嵌入文档保存成功")

引用文档

mongoengine库支持引用文档,以下是一个引用文档的示例:

class Author(mongoengine.Document):
    name = mongoengine.StringField(required=True)

class Book(mongoengine.Document):
    title = mongoengine.StringField(required=True)
    author = mongoengine.ReferenceField(Author)

# 创建作者和书籍
author = Author(name='John Doe')
author.save()

book = Book(title='Python Programming', author=author)
book.save()
print("引用文档保存成功")

# 查询书籍及其作者
books = Book.objects()
for book in books:
    print(f"书名: {book.title}, 作者: {book.author.name}")

实际应用场景

Web应用开发

在Web应用开发中,mongoengine库可以帮助开发者管理和操作MongoDB。假设在开发一个Flask应用,需要管理用户数据,可以使用mongoengine库实现这一功能。

from flask import Flask
from flask_mongoengine import MongoEngine

app = Flask(__name__)
app.config['MONGODB_SETTINGS'] = {
    'db': 'example_db',
    'host': 'localhost',
    'port': 27017
}

db = MongoEngine(app)

class User(db.Document):
    name = db.StringField(required=True)
    age = db.IntField()

@app.route('/')
def index():
    user = User.objects.first()
    return f'Hello, {user.name}!'

if __name__ == '__main__':
    app.run()

数据分析

在数据分析中,mongoengine库可以帮助开发者高效地从MongoDB中提取和处理数据。假设在进行数据分析,需要从MongoDB中提取大量数据,可以使用mongoengine库实现这一功能。

import pandas as pd
from mongoengine import connect, Document, StringField, IntField

connect('example_db')

class User(Document):
    name = StringField(required=True)
    age = IntField()

users = User.objects()
data = [{'name': user.name, 'age': user.age} for user in users]
df = pd.DataFrame(data)
print(df.head())

复杂查询和聚合

mongoengine库支持复杂的查询和聚合操作,可以帮助开发者实现高级数据处理任务。假设在进行复杂数据分析,需要对数据进行过滤和聚合,可以使用mongoengine库实现这一功能。

from mongoengine import connect, Document, StringField, IntField

connect('example_db')

class User(Document):
    name = StringField(required=True)
    age = IntField()

# 插入数据
User(name='Alice', age=30).save()
User(name='Bob', age=25).save()
User(name='Charlie', age=35).save()

# 查询年龄大于30的用户
users = User.objects(age__gt=30)
for user in users:
    print(user.name, user.age)

# 聚合操作:计算平均年龄
pipeline = [
    {"$group": {"_id": None, "average_age": {"$avg": "$age"}}}
]
result = User.objects().aggregate(pipeline)
for res in result:
    print("平均年龄:", res['average_age'])

总结

mongoengine库是一个功能强大且易于使用的对象文档映射(ODM)工具,能够帮助开发者高效地管理和操作MongoDB。通过支持对象文档映射、复杂查询、字段验证和约束、关系管理和灵活的数据模型,mongoengine库能够满足各种MongoDB操作需求。本文详细介绍了mongoengine库的安装方法、主要特性、基本和高级功能,以及实际应用场景。希望本文能帮助大家全面掌握mongoengine库的使用,并在实际项目中发挥其优势。无论是在Web应用开发、数据分析还是复杂查询和聚合中,mongoengine库都将是一个得力的工具。

如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!


如果想要系统学习Python、Python问题咨询,或者考虑做一些工作以外的副业,都可以扫描二维码添加微信,围观朋友圈一起交流学习。

56310d1894d6dcba0097831975c53a5e.gif

我们还为大家准备了Python资料和副业项目合集,感兴趣的小伙伴快来找我领取一起交流学习哦!

a6c0f63781752ff2e8163b14b90429d1.jpeg

往期推荐

历时一个月整理的 Python 爬虫学习手册全集PDF(免费开放下载)

Python基础学习常见的100个问题.pdf(附答案)

学习 数据结构与算法,这是我见过最友好的教程!(PDF免费下载)

Python办公自动化完全指南(免费PDF)

Python Web 开发常见的100个问题.PDF

肝了一周,整理了Python 从0到1学习路线(附思维导图和PDF下载)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/640069.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Oracle 证书的重要性

随着信息技术的飞速发展,数据库管理已成为企业运营中不可或缺的一部分。Oracle作为全球领先的数据库管理系统提供商,其Oracle Certified Professional(OCP)认证已成为数据库管理员和开发人员追求的专业认证之一。本文将深入探讨Or…

前端工程化07-常见的包管理工具npm、yarn、cnpm、npx、pnpm

8、包管理工具 8.1、包管理工具概述 npm包管理工具、在安装node的时候这个东西就已经安装过了,通过npm去管理包的时候这个时候回有一个配置文件叫做package.json,他是以json的方式来书写对应的一个配置文件,这个配置文件是可以添加特别多的一些字段的&…

前端-移动端布局

如何在PC端模拟移动端设备 可以在浏览器里打开检查 点击一下移动端按钮 然后选择一下对应的手机型号可以切换到对应的手机端 响应式布局实现方法 Viewport Flex 弹性盒子 Flex容器属性 flex-direction flex-wrap justify-content align-items align-content 进阶学习建议 Vu…

【网络版本计算器的实现】

本章重点 理解应用层的作用, 初识HTTP协议理解传输层的作用, 深入理解TCP的各项特性和机制对整个TCP/IP协议有系统的理解对TCP/IP协议体系下的其他重要协议和技术有一定的了解学会使用一些分析网络问题的工具和方法 ⭐注意!! 注意!! 注意!! 本课是网络编程的理论基础.是一个服务…

那些网络安全上的事实,很多人不见得知道!

明月发现不少小白对网络安全的认知几乎为零,甚至明月还碰到一个说 VPN 能彻底隐匿自己的,至于现在这帮动不动就利用 DDos/CC 攻击被人网站来推销境外高防服务器、高防 CDN 的老鼠屎们更是网络安全知识白痴的水平,破坏和攻击的水平完全取决于能…

零一万物Yi-1.5开源,34B/9B/6B多尺寸,34B超Qwen1.5-72B

前言 近年来,大型语言模型(LLM)在各个领域展现出惊人的能力,为人们的生活和工作带来了巨大的改变。然而,大多数开源 LLM 的性能仍然无法与闭源模型相媲美,这限制了 LLM 在科研和商业领域的进一步应用。为了…

详细分析crontab定时执行任务(附Demo | 定时清空Tomcat的实战)

目录 前言1. 基本知识2. Demo3. 实战3.1 错误版本3.2 正确版本 前言 由于用户量大,且导出的日志以及缓存特别多,急需定期删除文件 1. 基本知识 crontab 是一个用于定时执行任务的命令行工具,通常在 Unix 和类 Unix 系统中可用,表…

MCF-Microbial Cell Factories

文章目录 一、期刊简介二、征稿信息三、期刊表现四、投稿须知五、投稿咨询 一、期刊简介 Microbial Cell Factories 是一份开放的同行评审期刊,涵盖了与微生物细胞作为重组蛋白和天然产物的生产者或作为工业兴趣的生物转化的催化剂的开发、使用和研究相关的任何主题…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-17讲 定时器按键消抖

前言: 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM(MX6U)裸机篇”视频的学习笔记,在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

抖音跳转微信卡片制作教程 小白也能搞

实测可以正常跳转,很牛逼,给大家分享一下~ 这是我做出来抖音发出去的效果,大家会制作了可以去卖钱,市场上一个这个卡片都要卖50-200,很不错的!! https://pan.baidu.com/s/1xPmGAWPcbAp7eXg7Dc…

VMware 和 VirtualBox开机自启指定虚拟机详细教程

VMware上虚拟机随宿主机开机自启 1. 设置自动启动虚拟机 网上教程旧版的,界面和新版有所差异。17版本设置如下:VMware Workstation工作台 -> 文件 -> 配置自动启动虚拟机 -> 按顺序选择需要启动的虚拟机 VMWare17配置自动启动虚拟机提示&…

当前API面临的安全风险,有什么安全措施

在当今信息化高速发展的时代,API(应用程序编程接口)技术已成为企业数字化转型的基石,它连接着各种服务、传输数据并控制系统,成为现代数字业务环境不可或缺的一部分。然而,随着API的广泛应用,其…

【B站 heima】小兔鲜Vue3 项目学习笔记

系列文章目录 Day 01 目录 系列文章目录前言Day011.项目使用相关技术栈2. 项目规模和亮点3. Vue2和Vue3实现一个小案例4. vue3的优势5. create-vue脚手架工具6. 熟悉我们的项目目录和文件7. 组合式API-setup选项8. 组合式API-reactive和ref函数9. 组合式API-computed计算属性…

C++ | Leetcode C++题解之第110题平衡二叉树

题目: 题解: class Solution { public:int height(TreeNode* root) {if (root NULL) {return 0;}int leftHeight height(root->left);int rightHeight height(root->right);if (leftHeight -1 || rightHeight -1 || abs(leftHeight - rightH…

【蓝桥杯选拔赛真题76】python找出元素 第十四届青少年组蓝桥杯python选拔赛真题 算法思维真题解析

目录 python找出元素 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python找出元素 第十四届蓝桥杯青少年组python比赛选拔赛真题 一、题目要…

一文了解 FileBeat:诞生背景、发展历程与定义

🐇明明跟你说过:个人主页 🏅个人专栏:《洞察之眼:ELK监控与可视化》🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、什么是ELK 2、FileBeat在ELK中的角色 3、File…

数据结构顺序表实现通讯录

目录 1. 前言: 2.通讯录项目的创建 3. 通讯录的实现 3.1 通讯录的初始化 3.2 通讯录的销毁 3.3 通讯录添加数据 3.4 通讯录查找数据 3.5 通讯录展示数据 3.6 通讯录删除数据 3.7 通讯录修改数据 4. 通讯录完整代码 4.1 test.c 4.2 SeqList.h 4.3 SeqLis…

OneAPI接入本地大模型+FastGPT调用本地大模型

将Ollama下载的本地大模型配置到OneAPI中,并通过FastGPT调用本地大模型完成对话。 OneAPI配置 新建令牌 新建渠道 FastGPT配置 配置docker-compose 配置令牌和OneAPI部署地址 配置config.json 配置调用的渠道名称和大模型名称 {"systemEnv": {&qu…

【虚拟机软件】 VMware Workstation Pro 17 新建 Linux 虚拟机教程(CentOS 7 版本)

文章目录 下载安装 VMware Workstation Pro 17 软件下载 Linux 的 ISO 映像文件Linux版本选择 新建虚拟机准备配置新建安装 后续设置文章导航 我是一名立志把细节说清楚的博主,欢迎【关注】🎉 ~ 原创不易, 如果有帮助 ,记得【点赞…

【全开源】填表统计预约打卡表单系统FastAdmin+ThinkPHP+UniApp

简化流程,提升效率 一、引言:传统表单处理的局限性 在日常工作和生活中,我们经常会遇到需要填写表单、统计数据和预约打卡等场景。然而,传统的处理方式往往效率低下、易出错,且不利于数据的统计和分析。为了解决这些…