python 实现excel导入mongodb学习及踩坑
python导入excel到mongodb
直接上代码 后便有踩坑
import xlrd import json from pymongo import MongoClient def excel2mongodb(name): # 连接数据库 url = "mongodb://shop:aaaaa@00.111.22.333:27022/database_name?main?authSource=admin&authMechanism=SCRAM-SHA-1" db = MongoClient(url)[shop_selection] collection = tendency_dim_shop # 读取Excel文件 data = xlrd.open_workbook(name) table = data.sheets()[0] # 读取excel第一行数据作为存入mongodb的字段名 row_stag = table.row_values(0) n_rows = table.nrows return_data = { } save_size = 0 save_collection = [] for i in range(1, n_rows): # 将字段名和excel数据存储为字典形式,并转换为json格式 return_data[i] = json.dumps(dict(zip(row_stag, table.row_values(i)))) # 通过编解码还原数据 return_data[i] = json.loads(return_data[i]) # 转换表头为所需字段名 del return_data[i][序号] return_data[i][taskName] = return_data[i].pop(任务名称) return_data[i][taskDetail] = return_data[i].pop(任务描述) return_data[i][taskArea] = return_data[i].pop(任务区域) return_data[i][month] = return_data[i].pop(月份) return_data[i][flowMonth] = return_data[i].pop(月均天级客流) save_collection.insert(save_size, return_data[i]) if save_size >= 1000: db[collection].insert_many(save_collection) save_size = 0 save_collection.clear() else: save_size += 1 db[collection].insert_many(save_collection) if __name__ == __main__: excel2mongodb(/Users/hh/PycharmProjects/excel2mongodb/20220217_202101_202112.xls)
踩坑 excel中有month列,格式202201,但是导入后会发现他是数字,会变成202201.0令人头疼不已,所以导入需要进行下修改。或者最后整体更新。