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

news2024/12/24 9:30:20

文章目录

  • 前言
  • 一、MongoEngine 简介
  • 二、MongoEngine的安装与连接
    • 1. 安装MongoEngine
    • 2. 连接到MongoDB
    • 3. 定义数据模型
  • 三、MongoEngine模型介绍
    • 1. 常见数据类型
    • 2. 数据类型参数
  • 总结

前言

为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮到一些萌新进行新技术的学习那也是极好的。作者菜菜一枚,文章中如果有记录错误,欢迎读者朋友们批评指正。
(博客的参考源码可以在我主页的资源里找到,如果在学习的过程中有什么疑问欢迎大家在评论区向我提出)

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:

 pip install mongoengine

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

2. 连接到MongoDB

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

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. 导入必要的类和字段类型:

from mongoengine import Document, StringField, IntField

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

class Person(Document):
    pass

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

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. 操作数据

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

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: 用于存储字符串类型的数据。
from mongoengine import StringField

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

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

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

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

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

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

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

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

class Comment(Document):
    text = StringField()

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

2. 数据类型参数

1. 通用参数

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

2. StringField:

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

3. IntField:

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

4. FloatField:

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

5. BooleanField:

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

6. DateTimeField:

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

7. ListField:

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

8. EmbeddedDocumentField:

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

address = EmbeddedDocumentField(Address)

9. ReferenceField:

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

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

总结

欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下。
(博客的参考源码可以在我主页的资源里找到,如果在学习的过程中有什么疑问欢迎大家在评论区向我提出)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

除静电离子风棒的工作原理及应用

除静电离子风棒是一种常见的除静电设备,它的工作原理是通过产生大量的负离子来中和物体表面的静电电荷,从而达到除静电的目的。 静电离子风棒内部装有一个电离器,电离器会将空气中的氧气分子或水分子电离成正、负离子。这些带电的离子在空气…

ubuntu疑难杂症

1.ubuntu 使用apt 安装软件时提示出现不能获得lock $ sudo rm /var/lib/dpkg/lock$ sudo dpkg --configure -a$ sudo rm /var/lib/apt/lists/lock

什么是防抖和节流

防抖和节流都是前端开发中常用的优化性能的技术。 一、定义 防抖: 防抖指的是在事件触发后,在规定的时间内若再次触发,则重新计时,直到规定时间内没有再次触发事件,才执行事件处理。这样可以避免在短时间内频繁地触发…

vtk之【vtkPolyData、vtkCell、vtkPoints】

文章目录 一,vtkPolyData、cell、point1) 例子2) vtkPolyData、vtkCell、vtkPoints 二,vtkNew<>与vtkSmartPointer<>的区别:三&#xff0c;补充 一,vtkPolyData、cell、point 1) 例子 /*** vtkNew 是一个类模板* vtkNew<> 是一个简单的 RAII&#xff08;Res…

【ARM CoreLink 系列 5 -- CI-700 控制器介绍 】

文章目录 1.1 什么是 CI-700?1.1.1 关于 CI-7001.1.2 CI-700 特点1.2 全局配置参数1.2.1 寻址能力1.3 组件和配置1.3.1 CI-700 互联的结构1.3.2 Crosspoint(XP)1.3.3 外部接口1.4 组件(Components)1.1 什么是 CI-700? CI-700是一种AMBA 5 CHI互连,具有可定制的网状拓扑结构…

onlyOfice取消上传文件大小的限制

进入docker容器 docker exec -it 容器名ID bash 编辑配置文件 #如果不能编辑,需安装vim apt-get update apt-get install vim #如果不能安装vim&#xff0c;可以在容器外部编辑配置文件后上传至容器&#xff1a; docker cp /home/file/文件 容器id:/etc/onlyoffice/d…

2023/10/7 -- ARM

【程序状态寄存器读写指令】 1.指令码以及格式 mrs:读取CPSR寄存器的值 mrs 目标寄存器 CPSR&#xff1a;读取CPSR的数值保存到目标寄存器中msr:修改CPSR寄存器的数值msr CPSR,第一操作数:将第一操作数的数值保存到CPSR寄存器中//修改CPSR寄存器&#xff0c;也就表示程序的状…

频敏变阻器 BP4G-31511/06350 BP4G-25010/04563 结构简单、操作方便

BP4G系列频敏变阻器&#xff08;以下简称BP4G&#xff09;适用于14-1000KW绕线型异步感应电机作重载偶尔起动用。它具有结构简单、操作方便、维护容易等优点&#xff0c;是一种理想的电动机起动装置 BP4G系列频敏变阻器(以下简称BP4G)适用于14-1000KW绕线型异步感应电机作重载…

川西旅游网系统-前后端分离(前台vue 后台element UI,后端servlet)

前台&#xff1a;tour_forword: 川西旅游网前端----前台 (gitee.com) 后台&#xff1a;tour_back: 川西旅游网-------后台 (gitee.com) 后端 &#xff1a;tour: 川西旅游网------后端 (gitee.com)

点餐小程序实战教程05-用户注册

上一篇我们讲解了用户身份识别的问题&#xff0c;本篇我们讲解一下注册功能以及审核功能。 1 表单容器 注册功能是使用表单容器完成&#xff0c;表单容器会根据数据源的字段来自动的生成页面&#xff0c;从右侧的组件区拖入表单容器 表单容器需要选择我们创建的用户管理的数…

GaussDB技术解读系列:高安全之密态等值

在第14届中国数据库技术大会&#xff08;DTCC2023&#xff09;的GaussDB“五高两易”核心技术&#xff0c;给世界一个更优选择专场&#xff0c;华为GaussDB首席安全架构师郭亮详细解读了GaussDB的高安全之密态等值技术。 本篇为大家分享GaussDB高安全的关键特性&#xff0c;名字…

2023年【烟花爆竹经营单位主要负责人】考试及烟花爆竹经营单位主要负责人新版试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 烟花爆竹经营单位主要负责人考试根据新烟花爆竹经营单位主要负责人考试大纲要求&#xff0c;安全生产模拟考试一点通将烟花爆竹经营单位主要负责人模拟考试试题进行汇编&#xff0c;组成一套烟花爆竹经营单位主要负责…

嬴图 | 微距观察从“表数据”到“图数据”的建模过程

前言 随着图数据库技术在工业领域的有效开展和深入应用&#xff0c;在建模时&#xff0c;到底“图数据”与“表数据”有哪些不同&#xff1f;本文&#xff0c;笔者以搭建一个简单的医院信息管理系统为例&#xff0c;具体对比并阐述了用关系型查询语言SQL和图查询语言UQL&#…

阿里云/腾讯云国际站账号:腾讯云国际站特效SDK购买

产品介绍 随着直播、短视频业务的爆发式增长&#xff0c;丰富多样的视频特效&#xff0c;自然生动的智能美颜&#xff0c;新奇有趣的贴纸玩法也受到大量关注&#xff0c;为多种视频场景注入了新的生机与活力。腾讯特效 SDK&#xff08;Tencent Effect SDK&#xff09;&#xf…

Node18.x进阶使用总结之MongoDB7.x(三)

Node18.x进阶使用总结之MongoDB7.x 1、MongoDB7.x的安装1.1、下载安装与启动1.2、MongoDB目录1.3、安装MongoDB Shell1.4、设置环境变量1.5、使用MongoDB 2、命令行交互2.1、数据库命令2.2、集合命令2.3、文档命令 3、Mongoose3.1、连接数据库3.2、创建新文档3.3、字段类型3.4、…

vue 百度地图/天地图设置铺满屏幕100%,解决空隙问题

设置100%无效&#xff0c;刷新依然右侧有空隙&#xff0c;解决&#xff1a;min-width: 100vw; <div class"aui-flex-col" style"width: 100%; height:100%"><div id"mapAllCon" style"width: 100%; min-width: 100vw; height: 10…

从0开始python学习-31.selenium 文本输入框、下拉选择框、文件上传、时间插件选择元素定位

目录 1. 纯文本输入框 2. 存在默认值的文本输入 3. 下拉选择框 4. 输入后下拉选择框 5. 文件上传 6. 时间插件 1. 纯文本输入框 driver.find_element(By.XPATH,/html/body/div[2]/td[2]/input).send_keys(测试名称) 2. 存在默认值的文本输入 注意&#xff1a; 1. 这种存…

mkv怎么转换为mp4?

mkv怎么转换为mp4&#xff1f;你是否有过这样的情况&#xff0c;电脑上播放MKV格式的视频文件很流畅&#xff0c;但却无法在手机端或者一些剪辑软件中正常播放以及识别&#xff0c;导致工作效率的降低&#xff1f;这个问题的根本原因在于电脑上的播放器可以兼容MKV格式&#xf…

Java中双冒号“::”到底什么意思

今天给大家分享一个JDK8中的新特性双冒号&#xff1a;”::“&#xff0c;双冒号“::”就是 Java 中的方法引用&#xff0c;是Java 8中的Lambda表达式写法之一&#xff0c;一种执行方法的方法。 在一定程度上简化了我们Java开发的冗余代码。 双冒号(::)使用场景一般有如下6种&a…

物流仓储RFID系统设计案例分享

一、项目背景 为了实现仓储货物管理数字化转型的目标&#xff0c;提升仓储业务自动化和数字化水平&#xff0c;在满足仓储日常需求的基础上&#xff0c;验证物联网和人工智能相关技术能力&#xff0c;为仓储业务的柔性自动化、快速部署和复制提供储备能力。 项目设计目标包括…