
作者:Python進階者
來源:Python爬蟲與數據挖掘
大家好,我是吳老板。今天給大家分享一個可將Mongodb數據庫里邊的文件轉換為表格文件的庫,這個庫是我自己開發的,有問題可以隨時咨詢我。
Mongo2file庫是一個 Mongodb 數據庫轉換為表格文件的庫。
在我的日常工作中經常和 mongodb 打交道,而從 mongodb 數據庫中批量導出數據為其他格式則成為了剛需。
如果您跟我一樣每次導出數據時都需要重新編寫或到處尋找 腳本代碼 的話,這個庫可能會對您產生幫助。
mongo2file 依賴于 PyArrow 庫。它是 C++ Arrow 的 Python 版本實現。
PyArrow 目前與 Python 3.7、3.8、3.9 和 3.10 兼容。
倉庫地址: https://github.com/apache/arrow
如果您在 Windows 上遇到任何的導入問題或錯誤,您可能需要安裝 Visual Studio 2015。
警告: PyArrow 目前只支持到 win64 位 ( Python 64bit ) 操作系統。
其次,除了常見的 csv、excel、以及 json 文件格式之外, mongo2file 還支持導出 pickle、feather、parquet 的二進制壓縮文件。
pickle、feather、parquet 是 Python 序列化數據的一種文件格式, 它把數據轉成二進制進行存儲。從而大大減少讀取的時間。
pip install mongo2file
快速開始
import os from mongo2file import MongoEngine
M = MongoEngine(
host=os.getenv('MONGO_HOST', '127.0.0.1'),
port=int(os.getenv('MONGO_PORT', 27017)),
username=os.getenv('MONGO_USERNAME', None),
password=os.getenv('MONGO_PASSWORD', None),
database=os.getenv('MONGO_DATABASE', 'test_'),
collection=os.getenv('MONGO_COLLECTION', 'test_')
) def to_csv(): result_ = M.to_csv() assert "successfully" in result_ def to_excel(): result_ = M.to_excel() assert "successfully" in result_ def to_json(): result_ = M.to_excel() assert "successfully" in result_ def to_pickle(): result_ = M.to_pickle() assert "successfully" in result_ def to_feather(): result_ = M.to_feather() assert "successfully" in result_ def to_parquet(): result_ = M.to_parquet() assert "successfully" in result_
to_csv()
當 MongoEngine 控制類指定了 mongodb 表名稱時、將對數據表 (mongodb集合) 進行導出操作。
其類方法參數包括:
import os from mongo2file import MongoEngine """
作用于 MongoEngine 類未指定表名稱時
""" M = MongoEngine(
host=os.getenv('MONGO_HOST', '127.0.0.1'),
port=int(os.getenv('MONGO_PORT', 27017)),
username=os.getenv('MONGO_USERNAME', None),
password=os.getenv('MONGO_PASSWORD', None),
database=os.getenv('MONGO_DATABASE', 'test_')
) def to_csv(): result_ = M.to_csv() assert "successfully" in result_ def to_excel(): result_ = M.to_excel() assert "successfully" in result_ def to_json(): result_ = M.to_json() assert "successfully" in result_
to_csv()
當 MongoEngine 控制類只指定了 mongodb 庫名稱時、將對數據庫下所有集合進行導出操作。
對于 mongodb 的全表查詢、條件查詢、聚合操作、以及索引操作(當數據達到一定量級時建議) 并不是直接影響 數據導出的最大因素。
因為 mongodb 的查詢一般而言都非??焖?,主要的瓶頸在于讀取 數據庫 之后將數據轉換為大列表存入 表格文件時所耗費的時間。
_這是一件非??膳碌氖虑開。
當沒有多線程(當然這里的多線程并不是對同一文件進行并行操作,文件寫入往往是線程不安全的)、 數據表查詢語句無優化時,并且當數據達到一定量級時(比如 100w 行),單表單線程表現出來的效果真是讓人窒息。
在 mongo2file 在進行大數據量導出時表現的并沒有多么優秀。導致的主要原因可能是:
mongo2file 表現的不如人意時,我做出了一下改進:
Reference API
MongoEngine
MongoEngine( host='localhost', port=27017, username=None, password=None, database='測試庫', collection='測試表_200000' )
to_csv(query, folder_path, filename, ...)
:param query: 數據庫查詢條件、字典類型、只作用于單表導出 :param folder_path: 指定導出的目錄 :param filename: 指定導出的文件名 :param _id: 是否導出 _id 默認否 :param limit: 限制數據表查詢的條數 :param is_block: 是否分塊導出 :param block_size: 塊大小、is_block 為 True 時生效
to_excel(query, folder_path, filename, ...)
:param query: 數據庫查詢條件、字典類型、只作用于單表導出 :param folder_path: 指定導出的目錄 :param filename: 指定導出的文件名 :param _id: 是否導出 _id 默認否 :param limit: 限制數據表查詢的條數 :param is_block: 是否分塊導出 :param block_size: 塊大小、is_block 為 True 時生效 :param mode: 導出模式, 枚舉類型、sheet 或 xlsx, 當 is_block 為 True 時生效 :param ignore_error: 是否忽略錯誤、數據表中存在非序列化類型時使用、這將一定程度上影響程序的性能
to_json(query, folder_path, filename, ...)
:param query: 數據庫查詢條件、字典類型、只作用于單表導出 :param folder_path: 指定導出的目錄 :param filename: 指定導出的文件名 :param _id: 是否導出 _id 默認否 :param limit: 限制數據表查詢的條數 :param is_block: 是否分塊導出 :param block_size: 塊大小、is_block 為 True 時生效
to_pickle(query, folder_path, filename, ...)
:param query: 數據庫查詢條件、字典類型、只作用于單表導出 :param folder_path: 指定導出的目錄 :param filename: 指定導出的文件名 :param _id: 是否導出 _id 默認否 :param limit: 限制數據表查詢的條數
to_feather(query, folder_path, filename, ...)
:param query: 數據庫查詢條件、字典類型、只作用于單表導出 :param folder_path: 指定導出的目錄 :param filename: 指定導出的文件名 :param _id: 是否導出 _id 默認否 :param limit: 限制數據表查詢的條數
to_parquet(query, folder_path, filename, ...)
:param query: 數據庫查詢條件、字典類型、只作用于單表導出 :param folder_path: 指定導出的目錄 :param filename: 指定導出的文件名 :param _id: 是否導出 _id 默認否 :param limit: 限制數據表查詢的條數
大家好,我是吳老板。以上就是今天要分享的全部內容了,總的來說,Mongo2file庫是一個可以將 Mongodb 數據庫轉換為表格文件的庫,不僅支持導出csv、excel、以及 json 文件格式, 還支持導出 pickle、feather、parquet 的二進制壓縮文件。歡迎大家積極嘗試,在使用過程中有遇到任何問題,歡迎隨時聯系我。
數據分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
CDA數據分析師證書考試體系(更新于2025年05月22日)
2025-05-26解碼數據基因:從數字敏感度到邏輯思維 每當看到超市貨架上商品的排列變化,你是否會聯想到背后的銷售數據波動?三年前在零售行 ...
2025-05-23在本文中,我們將探討 AI 為何能夠加速數據分析、如何在每個步驟中實現數據分析自動化以及使用哪些工具。 數據分析中的AI是什么 ...
2025-05-20當數據遇見人生:我的第一個分析項目 記得三年前接手第一個數據分析項目時,我面對Excel里密密麻麻的銷售數據手足無措。那些跳動 ...
2025-05-20在數字化運營的時代,企業每天都在產生海量數據:用戶點擊行為、商品銷售記錄、廣告投放反饋…… 這些數據就像散落的拼圖,而相 ...
2025-05-19在當今數字化營銷時代,小紅書作為國內領先的社交電商平臺,其銷售數據蘊含著巨大的商業價值。通過對小紅書銷售數據的深入分析, ...
2025-05-16Excel作為最常用的數據分析工具,有沒有什么工具可以幫助我們快速地使用excel表格,只要輕松幾步甚至輸入幾項指令就能搞定呢? ...
2025-05-15數據,如同無形的燃料,驅動著現代社會的運轉。從全球互聯網用戶每天產生的2.5億TB數據,到制造業的傳感器、金融交易 ...
2025-05-15大數據是什么_數據分析師培訓 其實,現在的大數據指的并不僅僅是海量數據,更準確而言是對大數據分析的方法。傳統的數 ...
2025-05-14CDA持證人簡介: 萬木,CDA L1持證人,某電商中廠BI工程師 ,5年數據經驗1年BI內訓師,高級數據分析師,擁有豐富的行業經驗。 ...
2025-05-13CDA持證人簡介: 王明月 ,CDA 數據分析師二級持證人,2年數據產品工作經驗,管理學博士在讀。 學習入口:https://edu.cda.cn/g ...
2025-05-12CDA持證人簡介: 楊貞璽 ,CDA一級持證人,鄭州大學情報學碩士研究生,某上市公司數據分析師。 學習入口:https://edu.cda.cn/g ...
2025-05-09CDA持證人簡介 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度、美團、阿里等 ...
2025-05-07相信很多做數據分析的小伙伴,都接到過一些高階的數據分析需求,實現的過程需要用到一些數據獲取,數據清洗轉換,建模方法等,這 ...
2025-05-06以下的文章內容來源于劉靜老師的專欄,如果您想閱讀專欄《10大業務分析模型突破業務瓶頸》,點擊下方鏈接 https://edu.cda.cn/g ...
2025-04-30CDA持證人簡介: 邱立峰 CDA 數據分析師二級持證人,數字化轉型專家,數據治理專家,高級數據分析師,擁有豐富的行業經驗。 ...
2025-04-29CDA持證人簡介: 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度,美團,阿里等 ...
2025-04-28CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-27數據分析在當今信息時代發揮著重要作用。單因素方差分析(One-Way ANOVA)是一種關鍵的統計方法,用于比較三個或更多獨立樣本組 ...
2025-04-25CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-25