有些时间,我们要上传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上传的,如果不是本地数据库的话,开始连接要填密码。