有些时间,我们要上传excel到mongo,单表还可以,但是多表怎么操作呢?那么我们在python对单表操作,如果多表上传的话,就加一个循环吧

完整代码:(12行可能要修改一下,表的地址)

import xlrd import json from pymongo import MongoClient import warnings warnings.filterwarnings("ignore") #连接数据库 client = pymongo.MongoClient('localhost', 27017) mydb= client['Desktop'] account = mydb['car_price'] #输入需要上传的表 data=xlrd.open_workbook('excel_to_mongo.xlsx') table=data.sheets()[0] #读取excel第一行数据作为存入mongodb的字段名 rowstag=table.row_values(0) nrows=table.nrows returnData={} for i in range(1,nrows): #将字段名和excel数据存储为字典形式,并转换为json格式 returnData[i]=json.dumps(dict(zip(rowstag,table.row_values(i)))) #通过编解码还原数据 returnData[i]=json.loads(returnData[i]) #print returnData[i] print(returnData[i]) account.insert(returnData[i])

这个代码也是用在网上的,不过,我好像不能运行。所以对它们进行了修改。

核心思想:拼接account.insert()语句,并循环excel的每一行

第一步:连接本地的MongoDB

#连接数据库 client = pymongo.MongoClient('localhost', 27017) mydb= client['Desktop'] account = mydb['car_price']

account是所上传的表,并命名为:account


第二步:输入需要上传的excel

#输入需要上传的表 data=xlrd.open_workbook('C:/Users/admin/Desktop/项目/广汽租赁/车价测算_mapping.xlsx') table=data.sheets()[0] #读取excel第一行数据作为存入mongodb的字段名 rowstag=table.row_values(0) nrows=table.nrows

第三步:遍历需要上传的每行

for i in range(1,nrows): #将字段名和excel数据存储为字典形式,并转换为json格式 returnData[i]=json.dumps(dict(zip(rowstag,table.row_values(i)))) #通过编解码还原数据 returnData[i]=json.loads(returnData[i]) #print returnData[i] print(returnData[i]) account.insert(returnData[i])

用到了json.dumps()将excel转成字典的那种格式,因为json是字典格式

打印处理是这样的:只是编码

{"u5e8fu53f7": 1.0, "u8f66u8f86u54c1u724c": "u5e7fu6c7du4f20u797a", "u8f66u578bu6b3eu5f0f": "2021u6b3e", "u8f66u7cfb": "u5f71u8c79", "u8f66u8f86u578bu53f7": "207T u5f71u8c79J10u7248", "u5382u5bb6u6307u5bfcu4ef7": 9.83, "u578bu53f7ID": "tri64708", "u578bu53f7u540du79f0": "u5e7fu6c7du4e58u7528u8f66 u5f71u8c79 2021u6b3e 270T u5f71u8c79J10u98deu4ebau7248", "u6307u5bfcu4ef7": 98300.0, "u5907u6ce8": "u7f51u7ad9u4e0au90fdu662fu5e26u6709u98deu4ebau72483u5b57", "u5b9eu9645u6210u4ea4u4ef7": "", "u5317u4eac": "", "u6210u90fd": "", "u5e7fu5dde": "", "u8d35u9633": "", "u54c8u5c14u6ee8": "", "u6d77u53e3": "", "u547cu548cu6d69u7279": "", "u5357u4eac": "", "u5357u5b81": "", "u9752u5c9b": "", "u53a6u95e8": "", "u4e0au6d77": "", "u4e4cu9c81u6728u9f50": "", "u897fu5b89": "", "u90d1u5dde": ""}

需要json.loads()将编码还原成数据

'序号': 1.0, '品牌': '传祺'

然后一条条插入表:account

这样就完成了,可能这个方法只是相对于简单结构excel上传的,如果不是本地数据库的话,开始连接要填密码。