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

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

本文详细介绍如何在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 相关产品和应用

全部下载

专题列表