MongoEngine 简介安装、连接、数据类型及其参数详解

文章目录

前言

为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮到一些萌新进行新技术的学习那也是极好的。作者菜菜一枚,文章中如果有记录错误,欢迎读者朋友们批评指正。

(博客的参考源码可以在我主页的资源里找到,如果在学习的过程中有什么疑问欢迎大家在评论区向我提出)

MongoEngine官方文档:http://docs.mongoengine.org/tutorial.html

一、MongoEngine 简介

Mongoengine是一个用于在 Python 应用程序中操作 MongoDB 数据库的 Object-Document Mapping (ODM) 库。它允许开发人员使用 Python 类来定义数据模型,然后通过这些模型执行数据库操作,而不需要编写原始的MongoDB查询语句。以下是Mongoengine的一些关键特点和用途:

  • Object-Document Mapping (ODM) :Mongoengine 提供了一种方便的方式来映射 Python 类和 MongoDB 文档之间的关系。你可以定义 Python 类来表示 MongoDB 中的文档,每个类属性对应文档的字段,从而简化了文档的创建、查询和更新操作。
  • 模型定义 :Mongoengine 允许你使用 Python 类来定义 MongoDB 文档的结构。这些模型类可以包含字段的定义、验证规则以及与其他模型之间的关系。这种方式使得数据模型的设计更加直观和可维护。
  • 丰富的查询功能 :Mongoengine 提供了丰富的查询功能,使你能够执行高级的查询操作,包括过滤、排序、聚合等。你可以使用链式方法构建查询,并得到符合条件的文档集合。
  • 自动索引管理 :Mongoengine 能够自动管理数据库中的索引,以提高查询性能。你可以在模型中定义索引规则,Mongoengine 会在数据库中创建和维护这些索引。
  • 数据验证 :Mongoengine 提供了数据验证功能,确保文档符合定义的模型规则。这有助于维持数据的一致性和完整性。
  • 支持复杂数据类型 :Mongoengine 支持多种复杂数据类型,如嵌套文档、列表和字典,使你能够更灵活地表示数据结构。
  • 轻量级:Mongoengine 是一个相对轻量级的库,易于集成到Python应用程序中。它不需要过多的配置或依赖项。

Mongoengine 在与 MongoDB 一起构建 Python 应用程序时非常有用,特别是对于那些需要处理半结构化或非关系型数据的应用程序。通过 Mongoengine,开发人员可以更轻松地管理和操作 MongoDB 中的数据,而不需要直接操作原始的 MongoDB 查询语句。

二、MongoEngine的安装与连接

1. 安装MongoEngine

使用pip安装MongoEngine:打开终端(命令行)并运行以下命令来安装MongoEngine:

python 复制代码
 pip install mongoengine

这会使用pip工具从Python Package Index(PyPI)安装MongoEngine库。

2. 连接到MongoDB

一旦MongoEngine安装完成,你可以在Python中使用它来连接到MongoDB。以下是连接到MongoDB的步骤:

python 复制代码
from mongoengine import connect

# 连接到MongoDB
connect(
    db='your_database_name',
    host='your_mongodb_uri',  #默认端口为27017时可以不写
    username='your_username',  # 如果需要认证
    password='your_password'   # 如果需要认证
)

上述代码中的参数含义如下:

db: 要连接的数据库名称。

host: MongoDB服务器的URI。通常,这是MongoDB服务器的IP地址和端口号(例如:'mongodb://localhost:27017'),但也可以包括其他连接参数,如认证信息。

username(可选): 如果MongoDB服务器需要用户名和密码进行身份验证,则提供MongoDB用户名。

password(可选): 如果MongoDB服务器需要用户名和密码进行身份验证,则提供MongoDB密码。

3. 定义数据模型

使用MongoEngine定义一个简单的数据模型需要遵循以下步骤:

1. 导入必要的类和字段类型:

python 复制代码
from mongoengine import Document, StringField, IntField

2. 创建一个继承自 Document 的类作为你的数据模型:

python 复制代码
class Person(Document):
    pass

3. 在数据模型类中定义字段,可以使用MongoEngine提供的字段类型:

python 复制代码
class Person(Document):
    name = StringField(required=True, max_length=100)
    age = IntField()

在上述代码中,我们定义了两个字段:name 和 age。StringField表示一个字符串字段,IntField表示一个整数字段。你可以根据需要选择其他字段类型,如BooleanField(布尔字段)、ListField(列表字段)等。

在字段定义中,你可以传递多个参数来指定字段的行为,如上述示例中的required=True表示该字段是必需的,max_length=100表示该字段的最大长度为100个字符。

4. 操作数据

这样,你就完成了一个简单的数据模型的定义。现在可以使用该模型来执行数据库操作,如插入数据、查询数据等。

python 复制代码
person = Person(name='John Doe', age=25)
person.save()  # 插入数据

# 查询数据
people = Person.objects(name='John Doe')
for p in people:
    print(p.name, p.age)

在上述代码中,我们创建了一个Person对象并保存到数据库中。然后,使用 Person.objects 方法通过查询条件来检索 Person 对象,并遍历结果打印出对象的 name 和 age 字段。

三、MongoEngine模型介绍

1. 常见数据类型

  • StringField: 用于存储字符串类型的数据。
python 复制代码
from mongoengine import StringField

class Person(Document):
    name = StringField(max_length=100)
  • IntField: 用于存储整数类型的数据。
python 复制代码
from mongoengine import IntField

class Product(Document):
    price = IntField()
  • FloatField: 用于存储浮点数类型的数据。
python 复制代码
from mongoengine import FloatField

class Product(Document):
    weight = FloatField()
  • BooleanField: 用于存储布尔值类型的数据。
python 复制代码
from mongoengine import BooleanField

class Task(Document):
    completed = BooleanField(default=False)
  • DateTimeField: 用于存储日期和时间类型的数据。
python 复制代码
from mongoengine import DateTimeField

class Event(Document):
    event_date = DateTimeField()
  • ListField: 用于存储列表类型的数据,可以包含不同类型的元素。
python 复制代码
from mongoengine import ListField

class ShoppingCart(Document):
    items = ListField(StringField())
  • .EmbeddedDocumentField: 用于嵌入其他文档模型作为字段的一部分。
python 复制代码
from mongoengine import EmbeddedDocument, EmbeddedDocumentField

class Address(EmbeddedDocument):
    street = StringField()
    city = StringField()
    state = StringField()

class Person(Document):
    name = StringField()
    address = EmbeddedDocumentField(Address)
  • ReferenceField: 用于存储文档之间的关联关系,通常用于实现文档之间的引用。
python 复制代码
from mongoengine import ReferenceField

class Comment(Document):
    text = StringField()

class Post(Document):
    title = StringField()
    comments = ListField(ReferenceField(Comment))

2. 数据类型参数

1. 通用参数

  • required: 指示字段是否为必需的,默认为False。如果设置为True,则在保存文档时必须提供该字段的值。
python 复制代码
name = StringField(required=True)
  • default: 指定字段的默认值。如果在保存文档时没有为该字段赋值,则将使用默认值。
python 复制代码
age = IntField(default=0)
  • unique: 指示字段的值是否必须在集合中是唯一的,默认为False。如果设置为True,则确保集合中的字段值都是唯一的。
python 复制代码
email = StringField(unique=True)
  • primary_key: 是否为文档的主键,默认为False
python 复制代码
book_id = IntField(primary_key=True)
  • choices: 指定字段的可接受值的列表或元组。只有在这些值中选择的值才会被接受。
python 复制代码
gender = StringField(choices=['male', 'female', 'other'])
  • verbose_name: 指定字段的可读性良好的名称。这个参数主要用于生成文档的人类可读的描述。
python 复制代码
name = StringField(verbose_name='Full Name')
  • help_text: 提供有关字段的帮助文本,用于描述字段或提供使用说明。
python 复制代码
age = IntField(help_text='Please enter your age in years.')

2. StringField:

  • max_length: 指定字符串的最大长度。
  • min_length: 指定字符串的最小长度。
  • regex: 指定一个正则表达式,限制允许的字符串模式。
  • choices: 指定一个列表或元组,限制可接受的字符串值。
python 复制代码
name = StringField(max_length=100, min_length=2, regex=r'^[A-Za-z ]*$', choices=['Mr.', 'Mrs.', 'Ms.'])

3. IntField:

  • min_value: 指定整数字段的最小值。
  • max_value: 指定整数字段的最大值。
python 复制代码
age = IntField(min_value=0, max_value=150)

4. FloatField:

  • min_value: 指定浮点数字段的最小值。
  • max_value: 指定浮点数字段的最大值。
python 复制代码
price = FloatField(min_value=0.0, max_value=1000.0)

5. BooleanField:

  • 无特定参数,通常用于表示布尔值(True或False)。
python 复制代码
completed = BooleanField()

6. DateTimeField:

  • default: 指定默认日期时间值。
  • auto_now: 如果设置为True,每次保存文档时都会更新字段为当前日期时间。
python 复制代码
created_at = DateTimeField(default=datetime.datetime.now, auto_now=True)

7. ListField:

  • field: 指定列表中元素的数据类型。
python 复制代码
items = ListField(StringField(max_length=50))

8. EmbeddedDocumentField:

  • document_type: 指定嵌入式文档的类型。
python 复制代码
class Address(EmbeddedDocument):
    street = StringField()
    city = StringField()

address = EmbeddedDocumentField(Address)

9. ReferenceField:

  • document_type: 指定引用的文档类型。
  • reverse_delete_rule: 指定在引用文档删除时如何处理引用。
python 复制代码
class Comment(Document):
    text = StringField()

class Post(Document):
    title = StringField()
    comments = ListField(ReferenceField(Comment, reverse_delete_rule=CASCADE))

总结

欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下。

(博客的参考源码可以在我主页的资源里找到,如果在学习的过程中有什么疑问欢迎大家在评论区向我提出)

相关推荐
猎人everest17 分钟前
快速搭建运行Django第一个应用—投票
后端·python·django
猎人everest19 分钟前
Django的HelloWorld程序
开发语言·python·django
chusheng18401 小时前
2025最新版!Windows Python3 超详细安装图文教程(支持 Python3 全版本)
windows·python·python3下载·python 安装教程·python3 安装教程
别勉.1 小时前
Python Day50
开发语言·python
G皮T2 小时前
【Elasticsearch】正排索引、倒排索引(含实战案例)
大数据·elasticsearch·搜索引擎·kibana·倒排索引·搜索·正排索引
xiaohanbao092 小时前
day54 python对抗生成网络
网络·python·深度学习·学习
爬虫程序猿2 小时前
利用 Python 爬虫按关键字搜索 1688 商品
开发语言·爬虫·python
英杰.王2 小时前
深入 Java 泛型:基础应用与实战技巧
java·windows·python
安替-AnTi2 小时前
基于Django的购物系统
python·sql·django·毕设·购物系统
树叶@2 小时前
Python 数据分析10
python·数据分析