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批量插入的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。