Python中使用MongoEngine操作MongoDB数据库详解

半杯拿铁
半杯拿铁
发布时间:2026-10-13| 6人浏览过
原创

本文详细介绍如何在Python中利用MongoEngine对MongoDB数据库进行高效操作。内容涵盖MongoEngine作为对象文档映射器(ODM)的核心概念、安装方法,以及通过定义Model类实现数据的保存、多条件查询(如年龄范围10至30岁)、排序、字段更新等具体代码示例,帮助开发者降低代码耦合度并优化数据库管理。

MongoEngine简介与优势

本文旨在提供在Python环境中使用MongoEngine操作数据库的详细教程与实例。文中通过具体的代码示例进行了深入解析,内容详实,对读者的学习或实际工作具有重要的参考价值,建议相关技术人员仔细阅读。

虽然可以直接使用pymongo库来操作MongoDB数据库,但如果将数据库操作逻辑直接嵌入到业务脚本中,会导致应用代码的耦合度过高,进而影响代码的可维护性与优化空间。

现代应用通常采用MVC框架进行设计。为了保持清晰的MVC架构,需要将数据库操作部分从业务逻辑中剥离出来,作为独立的Model层。此时,引入MongoEngine是实现这一目标的有效手段。

MongoEngine是一个对象文档映射器(ODM),其设计理念类似于关系型数据库中的ORM(对象关系映射器),旨在简化NoSQL数据库的操作流程。

MongoEngine提供的抽象机制基于类定义,开发者创建的所有数据模型均表现为Python类的形式,这使得数据结构的管理更加直观和规范。

安装与模型定义

安装MongoEngine非常简单,只需在命令行中执行pip install mongoengine即可。


pip install mongoengine

在实际使用时,首先需要声明一个继承自MongoEngine.Document的类,以此作为与数据库交互的基础模型。

在该类中声明具体的属性字段,这相当于构建了一个用于存储数据的数据结构。数据将以类似数据结构的形式持久化到数据库中。通常,建议将这类模型类集中存放在一个独立的脚本文件中,作为应用的Model模块,以便于统一管理。


from mongoengine import *
connect('test', host='localhost', port=27017)
import datetime
class Users(Document):
  name = StringField(required=True, max_length=200)
  age = IntField(required=True)

users = Users.objects.all() #返回所有的文档对象列表
for u in users:
  print("name:",u.name,",age:",u.age)

数据保存操作

接下来介绍如何保存文档到数据库。通过实例化模型类并调用save()方法,可以将数据写入MongoDB。


from mongoengine import *
connect('test', host='localhost', port=27017)
import datetime
class Users(Document):
  name = StringField(required=True, max_length=200)
  age = IntField(required=True)
user1 = Users(
  name='zz',
  age= 11
)
user1.save()  
print(user1.name)
user1.name = 'zz11'
user1.save()    
print(user1.name)

查询与排序示例

演示如何查询年龄大于等于10且小于30岁的用户,并按照姓名进行升序排列。


from mongoengine import *
connect('test', host='localhost', port=27017)
import datetime
class Users(Document):
  name = StringField(required=True, max_length=200)
  age = IntField(required=True)
user_search = Users.objects(age__gte=10, age__lt=33).order_by('name')
for u in user_search:
  print("name:",u.name,",age:",u.age)

演示如何查询年龄大于等于10且小于30岁的用户,并按照姓名进行降序排列。


from mongoengine import *
connect('test', host='localhost', port=27017)
import datetime
class Users(Document):
  name = StringField(required=True, max_length=200)
  age = IntField(required=True)
user_search = Users.objects(age__gte=10, age__lt=33).order_by('-name')
for u in user_search:
  print("name:",u.name,",age:",u.age)

演示如何根据特定姓名(如name='zz11')查询对应的用户文档。


from mongoengine import *
connect('test', host='localhost', port=27017)
import datetime
class Users(Document):
  name = StringField(required=True, max_length=200)
  age = IntField(required=True)

tmp = Users.objects(name="zz11")
for u in tmp:
  print("name:",u.name,",age:",u.age)

数据更新操作

演示如何将指定姓名(name='zz11')用户的age字段值增加1。


from mongoengine import *
connect('test', host='localhost', port=27017)
import datetime
class Users(Document):
  name = StringField(required=True, max_length=200)
  age = IntField(required=True)
tmp = Users.objects(name="zz11").update(inc__age=1)
tmp = Users.objects(name="zz11")
for u in tmp:
  print("name:",u.name,",age:",u.age)

演示如何将指定姓名(name='zz11')用户的age字段值直接设置为55。


from mongoengine import *
connect('test', host='localhost', port=27017)
import datetime
class Users(Document):
  name = StringField(required=True, max_length=200)
  age = IntField(required=True)

tmp = Users.objects(name="zz11").update(set__age=55)
tmp = Users.objects(name="zz11")
for u in tmp:
  print("name:",u.name,",age:",u.age)

以上就是本文的全部内容,希望这些示例能对读者的学习有所帮助。欢迎大家持续关注本站,获取更多技术分享。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。