pymongo insert_many 批量插入的实例
我就废话不多说了,大家还是直接看代码吧~
lt=client.fangjia.district_stat_all_0416 dl=dt.find(query) bf=[] formindl: bf.append(m) iflen(bf)==20000: lt.insert_many(bf) bf=[] lt.insert_many(bf)
补充知识:Python操作Mongodb插入数据的两种方法:insert_one()与insert_many()
代码说明:
将mysql中table的数据插入到mongodb里
sys.setdefaultencoding('utf8') importweb frompymongoimportMongoClient classgetPltfList(object): def__init__(self): self.db1=web.database(dbn='mysql',db='episode',user='root',pw='abc111--',host='127.0.0.1') self.db1.printing=False self.db2=web.database(dbn='mysql',db='episode_soc',user='root',pw='abc111--',host='127.0.0.1') self.db2.printing=False self.db3=web.database(dbn='mysql',db='cl_episode',user='root',pw='abc111--',host='127.0.0.1') self.db3.printing=False self.db4=web.database(dbn='mysql',db='cl_episode_soc',user='root',pw='abc111--',host='127.0.0.1') self.db4.printing=False def__call__(self): returnself.createPltfList() defcreatePltfList(self): self.ckpltfList=list(self.db1.query('selectname,ipfromEPISODE_PLTF_INFOorderbyidDESC')) self.ckpltfList+=list(self.db2.query('selectname,ipfromEPISODE_PLTF_INFOorderbyidDESC')) self.clpltfList=list(self.db3.query('selectname,ipfromEPISODE_PLTF_INFOorderbyidDESC')) self.clpltfList+=list(self.db4.query('selectname,ipfromEPISODE_PLTF_INFOorderbyidDESC')) returnself.ckpltfList,self.clpltfList if__name__=='__main__': mpList=list() flag=0 tmp=0 sum1=0 sum2=0 pltfList=getPltfList()() client=MongoClient("127.0.0.1",27017) mdb=client.episode collection=mdb.pltf_basic_info #print(type(pltfList[1]))#list result=list() forpltf_myinpltfList[0]: pltf_mog=collection.find() forrecordinpltf_mog: IP=record.get('Cfg').get('Debug_IP') Name=record.get('Cfg').get('Register_Name') #printIP,Name ifIP==pltf_my['ip']andName==pltf_my['name']: flag=1 #printIP,Name break else: flag=0 ifflag==0: data1={"Cfg":{"Debug_IP":pltf_my['ip'],"Register_Name":pltf_my['name'],"Site":"SH-CK"}} #printdata1 result.append((data1)) #collection.insert_one(data1) #collection.delete_one(data) sum1=sum1+1 #printlen(result) #collection.insert_many(result) forpltf_myinpltfList[1]: pltf_mog=collection.find() forrecordinpltf_mog: IP=record.get('Cfg').get('Debug_IP') Name=record.get('Cfg').get('Register_Name') ifpltf_my['ip'].encode("utf-8")==IP.encode("utf-8")andpltf_my['name'].encode("utf-8")==Name.encode("utf-8"): tmp=1 #printIP,Name break else: tmp=0 iftmp==0: data2={"Cfg":{"Debug_IP":pltf_my['ip'],"Register_Name":pltf_my['name'],"Site":"SH-CL"}} #printdata2 result.append((data2)) #collection.insert_one(data2) #collection.delete_one(data) sum2=sum2+1 collection.insert_many(result) printsum1,sum2
刚开始的时候我使用的是insert_one()方法,一条一条的插入到mongodb的集合里,但是计算出的sum有出入。
在调试的过程中我发现:
注释掉#collection.insert_one(data1)#collection.insert_one(data2)
计算出来的sum1=193sum2=222这是合理的,因为ck_mysql里有193条记录,cl_mysql里有234条记录,mongod里有总共有15条,但是12条是与cl_mysql重复,所以正确。
但是当我去掉注释使用collection.insert_one(data1)collection.insert_one(data2)时,打印出的sum1=181sum2=213
也就是说少了几个数据,我不知道去哪了。
想了好多办法,于是采用insert_many()的方法插入。先定义一个list(),将每个数据(数据的类型是dict)追加到list里:reslult.append(data1/data2),最后result里就会含有所有的数据,一起插入。
于是乎,问题解决了。
可是我还是很困惑insert_one()哪里出问题了!!!!!!
以上这篇pymongoinsert_many批量插入的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。