有一次遇到一個需求,需要把Excel的數據導入到MongoDB中,表面上感覺就是導入數據很簡單,但實際操作后,發現是比較麻煩的一個事情,一般圖形化的工具對于MongoDB而言,導入選項都是json的,根本沒有Excel的選項,而Excel中的數據包含敏感信息,又不能用在線工具轉換為json,當時為了盡快處理完事情,當時嘗試了Navicate工具,是支持的從Excel讀取插入到MongoDB中。
這個事件結束后,感覺還是有必要要寫個Python的導入腳本,完善自己的工具箱,如果再次遇到相同的問題可以有個PlanB。
代碼雖然沒有幾行,但是勝在好用
import pandas as pd
import pymongoclient = pymongo.MongoClient('mongodb://root:3a20ebec5e29c031be5ce78e6413a0@localhost:27017/admin?directConnection=true')
database = client["db1"]
collection = database["table1"]df = pd.DataFrame(pd.read_excel("工作簿1.xlsx", sheet_name ="Sheet1"))for row in df.itertuples():buf = {}for i,v in enumerate (list(df.columns)):buf [v] = row[i+1]print(buf)collection.insert_one(buf)
構建測試用Excel
MongoDB數據展示
另附Linux啟動mongodb的docker-compose腳本,windows或macos請自行更改
#!/bin/bash# 在當前目錄下創建mongodb的docker-compose及相關目錄mkdir mongo-shell
mkdir db
openssl rand -base64 745 > keyfile.key
sudo chown 999 keyfile.key
sudo chmod 600 keyfile.key
sudo chown 999 mongo-shellcat > docker-compose.yam <<EOF
version: "3.2"
services:mongo-standalone:image: mongo:4.4restart: alwaysenvironment:MONGO_INITDB_ROOT_USERNAME: rootMONGO_INITDB_ROOT_PASSWORD: passwordports:- "27017:27017"volumes:- /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime- ./db:/data/db- ./keyfile.key:/data/keyfile.keycommand: mongod --keyFile=/data/keyfile.key --auth --port=27017
EOFdocker-compose up -d