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?mongoengineclass?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?MongoEngineapp?=?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,?IntFieldconnect('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,?IntFieldconnect('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下載)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/16032.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/16032.shtml
英文地址,請注明出處:http://en.pswp.cn/web/16032.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

軟件需求規范說明模板

每個軟件開發組織都會為自己的項目選用一個或多個標準的軟件需求規范說明模板。有許多軟件需求規范說明模板可以使用(例如ISO/IEC/IEEE2011;Robertson and Robertson2013)。如果你的組織要處理各種類型或規模的項目,例如新的大型系統開發或是對現有系統進行微調&…

concurrency 并行編程

Goroutine go語言的魅力所在,高并發。 線程是操作系統調度的一種執行路徑,用于在處理器執行我們在函數中編寫的代碼。一個進程從一個線程開始,即主線程,當該線程終止時,進程終止。這是因為主線程是應用程序的原點。然后…

紅黑樹封裝map和set

紅黑樹源代碼 我們將由下列的KV模型紅黑樹來模擬封裝STL庫中的map和set 注意&#xff1a;為了實現封裝map和set&#xff0c;我們需要對下列源碼進行優化。 #pragma once #include<iostream> using namespace std; //枚舉類型的顏色分類 enum Colour {RED,BLACK };//定…

【Python爬蟲】圖片驗證碼的處理

什么是圖片驗證碼&#xff1f; 驗證碼&#xff08;CAPTCHA&#xff09;是&#xff02;Completely Automated Public Turing test to tell Computers and HumansApart”&#xff08;全自動區分計算機和人類的圖靈測試&#xff09;的縮寫&#xff0c;是一種區分用戶是計算機還是人…

Markdown魔法手冊:解鎖高效寫作的新技能

邊使用邊更新0.0... 文章目錄 一、如何在Markdown中插入表情&#xff1f;二、文字樣式設置1.文本顏色設置2.文本字號設置3.文本字體設置4. 實戰演練5.黃色高亮 一、如何在Markdown中插入表情&#xff1f; 在Markdown中插入表情&#xff08;emoji&#xff09;的方法取決于你使用…

如何提升百度小程序的收錄?百度小程序如何做優化?

? 如何通過百度小程序獲得更多的自然流量&#xff1f;這是做百度小程序肯定要考慮的問題&#xff0c;做百度小程序的目的就是想借助百度生態&#xff0c;做相應的關鍵詞給自己的小程序引流&#xff0c;如何把流量給做起來呢&#xff0c;接下來我從不同的方面給大家進行分析講解…

最新ChatGpt Desktop for Mac 安裝使用教程

1. 下載地址 請點擊鏈接下載 ChatGPT Desktop for MacOS 2. 使用要求 MacOS 版本 14需要時M1芯片的&#xff0c;如果你是因特爾的暫時還還不行 就算下載了也會出現下面的異常 3. 獲取權限資格 目前 ChatGPT MacOS Desktop還不是全量開放的, 如果你沒有收到通知說明你還沒…

在 Dockerfile 中遇到了連接到 pypi.org 超時的問題

看起來你在 Dockerfile 中遇到了連接到 pypi.org 超時的問題。這可能是由于網絡連接問題導致的。你可以嘗試以下方法解決這個問題&#xff1a; 1. 更換鏡像源&#xff1a; 有時候 pypi.org 的訪問會受到地理位置或網絡環境的影響&#xff0c;你可以考慮使用國內的鏡像源來代…

Oracle的ROWID解析

目錄 一、ROWID基礎概念二、ROWID的類型三、ROWID的用途四、注意事項五、管理與監控 Oracle的ROWID是一個非常核心的概念&#xff0c;它代表了一行數據在數據庫中的物理位置標識。 一、ROWID基礎概念 唯一性與不變性&#xff1a;ROWID是每行數據的唯一標識符&#xff0c;它在行…

【Spark】調整hive表在HDFS存的每個文件的大小

配置參數&#xff1a; spark.hadoop.hive.exec.orc.default.stripe.size78643200 spark.hadoop.orc.stripe.size78643200 spark.hadoopRDD.targetBytesInPartition78643200 spark.hadoop.hive.exec.dynamic.partition.modenonstrict spark.sql.sources.partitionOverwriteMode…

ipa 覆蓋算法測試

相關文章 ipa 功能包測試 ipa 分區算法 ipa 分區算法總結&#xff0c;部分算法圖解 ipa 覆蓋算法分析&#xff08;一&#xff09; ipa 覆蓋算法分析&#xff08;二&#xff09; 測試 網上找的地圖&#xff1a; fig.1 測試地圖 opencv fig.2 opencv 顯示的覆蓋路徑 rviz fi…

6.定時器分時復用測量占空比

1.CUBEMAX配置 測量PA6&#xff0c;PA7輸出的占空比&#xff0c;只需要把主要的配置&#xff0c;配置為A6口就行&#xff0c;A7口黃色表示配置不正確&#xff0c;不用管。 2.軟件代碼 TIME.c中找到TIM3的初始化&#xff0c;在后面初始化A7口 void MX_TIM3_Init_PA7(void) {/*…

創新實訓2024.05.25日志:Web應用技術選型

我們的web應用使用python web的fastapi框架&#xff0c;通過uvicorn開啟web服務。 1. refs 官網文檔&#xff1a;FastAPI (tiangolo.com) github&#xff1a;https://github.com/tiangolo/fastapi 2. 環境配置 python:3.11 uvicorn:0.29.0 pip install "uvicorn[stan…

老外賣27刀每月的教程已經更新

用了兩天半的時間&#xff0c;邊學習&#xff0c;邊整理了一份老外的視頻教程&#xff0c;涉及Facebook&#xff0c;YouTube&#xff0c;tiktok等大的流量平臺&#xff0c;有案例&#xff0c;有分析&#xff0c;有如何做。 這個教程是老外講的&#xff0c;沒有什么玄乎的塑造價…

理解矩陣內積與矩陣乘法的區別及其應用

文章目錄 矩陣內積&#xff08;逐元素乘積&#xff09;矩陣內積的用途矩陣乘法&#xff08;矩陣積&#xff09;矩陣乘法的用途區別總結結論 在數據科學、機器學習、計算機圖形學和圖像處理等領域&#xff0c;矩陣運算是非常基礎且重要的操作。然而&#xff0c;矩陣內積和矩陣乘…

【java程序設計期末復習】chapter3 運算符、表達式和語句

運算符、表達式和語句 Java提供了豐富的運算符&#xff0c;如算術運算符、關系運算符、邏輯運算符、位運算符等。 Java語言中的絕大多數運算符和C語言相同&#xff0c;基本語句&#xff0c;如條件分支語句、循環語句等也和C語言類似&#xff0c;因此&#xff0c;本章就主要知識…

聊聊ChatGPT的本質

這是鼎叔的第九十八篇原創文章。行業大牛和剛畢業的小白&#xff0c;都可以進來聊聊。 階段性總結下我對ChatGPT的基礎理解&#xff0c;算是一篇學習思考筆記吧。其中難免有很多不準確的&#xff0c;或過于簡略的地方&#xff0c;將來再迭代學習。 OpenAI做ChatGPT的底層邏輯…

GitLab的原理及應用詳解(六)

本系列文章簡介&#xff1a; 隨著軟件開發的不斷進步和發展&#xff0c;版本控制系統成為了現代軟件開發過程中不可或缺的一部分。而GitLab作為其中一種流行的版本控制工具&#xff0c;在軟件開發領域享有廣泛的應用。GitLab不僅提供了強大的版本控制功能&#xff0c;還集成了項…

如何利用線程池實現互聯網驗證碼保護服務

如何利用線程池實現互聯網驗證碼保護服務 1、業務背景與實現思路2、代碼實操1、業務背景與實現思路 首先介紹一下業務背景,假設我們的系統是一個短視頻播放網站,每個新加入的用戶都需要注冊賬號并綁定手機號。為了驗證用戶手機的正確性,我們的系統會發送一條驗證碼到用戶注…