Parse CSV Files and Insert Records to MongoDB Using Python

使用Python解析csv文件并使用Pymongo将数据保存到MongoDB里

最近要提取一个CSV文件里的内容,并且保存到MongoDB里。兄弟我Node.jsPromise学的不好,Promise里再嵌套一个Promise,这个就死活处理不好了。于是想到了用Python

但安装Python的环境又是一个大问题。于是我想到了wsl,也就是Windows 10最近比较牛叉的一个功能Windows Subsystem for Linux。于是去Microsoft Store上下载安装了一个Ubuntu

wsl有一个比较牛叉的特性,就是你的硬盘里的内容,都其实挂载在/mnt目录里了,进去看一下,你就明白了。

好,接下来,就在home目录下建了一个目录,并且写了一个小脚本,update.sh,代码如下:

1
2
#!/bin/bash
rm parseMyCsv.py && cp /mnt/d/pythonProjectPath/parseMyCsv.py .

这个小脚本的目的非常简单,更新wsl里的代码,为啥?因为你要在本地写代码啊,wsl没有桌面啊,即便可以安装,那也肯定很慢,不如本地写好了,立刻更新到wsl里调试。

一个小发现:

Windows Subsystem for Linux 竟然可以和本地物理机使用同一个MongoDB,而不用在wsl里重新安装一个MongoDB了

好,一切就绪之后,开始写吧,开始调试吧,写的过程,毫无亮点,照着文档写就行,但是,每次运行,总出现DuplicateKeyError,你知道吗,这个问题多要命么,折腾了一下午,我的代码毫无问题,对吧,问题出在数据库,对吧,但数据库里是空的啊,怎么可能有重复的key呢?

后来怎么解决的呢?我把整个collection删了,就立刻就好了。

所以问题出在MongoDB。单纯的用Robo 3T里删除document是不行的,obejctid还在。那么保存数据的时候,估计是算法的原因,导致每次都生成同一个objectid。

有另一个方法,就是在保存的时候,代码里写好怎样生成objectid,而不是靠mongodb自己生成,这样可以有效避免出现这个问题。

至于怎么写,要去查查资料。

最后,说一个问题,pipenv反正还没有完全搞好,总出问题。

© 2018 awesome.js All Rights Reserved.
Theme by hiero