python 实现excel导入mongodb学习及踩坑

本文介绍了如何使用Python从Excel文件中读取数据并将其导入MongoDB数据库,过程中遇到了Excel中的日期列(如'month')被识别为数字的问题。解决方案是通过数据转换确保日期列以正确格式存储。在导入大量数据时,还采用了分批插入的方式以优化性能。
部署运行你感兴趣的模型镜像

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令人头疼不已,所以导入需要进行下修改。或者最后整体更新。

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值