pymongo insert_many 批量插入的实例


Posted in Python onDecember 05, 2020

我就废话不多说了,大家还是直接看代码吧~

lt=client.fangjia.district_stat_all_0416
dl = dt.find(query)

bf=[]
for m in dl:
  bf.append(m)
  if len(bf)==20000:
    lt.insert_many(bf)
    bf=[]
lt.insert_many(bf)

补充知识:Python操作Mongodb插入数据的两种方法:insert_one()与insert_many()

代码说明:

将mysql中table的数据插入到mongodb里

sys.setdefaultencoding('utf8')
import web
from pymongo import MongoClient
class getPltfList(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):
    return self.createPltfList()

  def createPltfList(self):
    self.ckpltfList = list(self.db1.query('select name, ip from EPISODE_PLTF_INFO order by id DESC'))
    self.ckpltfList += list(self.db2.query('select name, ip from EPISODE_PLTF_INFO order by id DESC'))
    self.clpltfList = list(self.db3.query('select name, ip from EPISODE_PLTF_INFO order by id DESC'))
    self.clpltfList += list(self.db4.query('select name, ip from EPISODE_PLTF_INFO order by id DESC'))

    return self.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()
  for pltf_my in pltfList[0]:
    pltf_mog = collection.find()
    for record in pltf_mog:
      IP = record.get('Cfg').get('Debug_IP')
      Name = record.get('Cfg').get('Register_Name')
      # print IP, Name
      if IP == pltf_my['ip'] and Name == pltf_my['name'] :
        flag = 1
        # print IP, Name
        break
      else:
        flag = 0

    if flag == 0 :
      data1 = {"Cfg" : {"Debug_IP" : pltf_my['ip'],"Register_Name":pltf_my['name'], "Site":"SH-CK"} }
      # print data1
      result.append((data1))
      # collection.insert_one(data1)
      # collection.delete_one(data)
      sum1 = sum1+1
  # print len(result)
  # collection.insert_many(result)
  for pltf_my in pltfList[1]:
    pltf_mog = collection.find()
    for record in pltf_mog:
      IP = record.get('Cfg').get('Debug_IP')
      Name = record.get('Cfg').get('Register_Name')
      if pltf_my['ip'].encode("utf-8") == IP.encode("utf-8") and pltf_my['name'].encode("utf-8") == Name.encode("utf-8") :
        tmp = 1
        # print IP, Name
        break
      else:
        tmp = 0

    if tmp == 0 :
      data2 = {"Cfg" : {"Debug_IP":pltf_my['ip'],"Register_Name":pltf_my['name'], "Site":"SH-CL"} }
      # print data2
      result.append((data2))

      # collection.insert_one(data2)
      # collection.delete_one(data)
      sum2 = sum2+1

  collection.insert_many(result)
  print sum1,sum2

刚开始的时候我使用的是insert_one()方法,一条一条的插入到mongodb的集合里,但是计算出的sum有出入。

在调试的过程中我发现:

注释掉 # collection.insert_one(data1) # collection.insert_one(data2)

计算出来的sum1 = 193 sum2 = 222 这是合理的,因为ck_mysql里有193条记录,cl_mysql里有234条记录,mongod里有总共有15条,但是12条是与cl_mysql重复,所以正确。

但是当我去掉注释使用 collection.insert_one(data1) collection.insert_one(data2)时,打印出的sum1=181 sum2 = 213

也就是说少了几个数据,我不知道去哪了。

想了好多办法,于是采用insert_many()的方法插入。先定义一个list(),将每个数据(数据的类型是dict)追加到list里:reslult.append(data1/data2),最后result里就会含有所有的数据,一起插入。

于是乎,问题解决了。

可是我还是很困惑insert_one()哪里出问题了!!!!!!

以上这篇pymongo insert_many 批量插入的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
对变量赋值的理解--Pyton中让两个值互换的实现方法
Nov 29 Python
分析Python读取文件时的路径问题
Feb 11 Python
浅析Python装饰器以及装饰器模式
May 28 Python
解决Python pandas plot输出图形中显示中文乱码问题
Dec 12 Python
python实现桌面气泡提示功能
Jul 29 Python
使用pandas读取文件的实现
Jul 31 Python
python 利用pyttsx3文字转语音过程详解
Sep 25 Python
python分布式编程实现过程解析
Nov 08 Python
可视化pytorch 模型中不同BN层的running mean曲线实例
Jun 24 Python
Python requests接口测试实现代码
Sep 08 Python
python操作redis数据库的三种方法
Sep 10 Python
python实现数据结构中双向循环链表操作的示例
Oct 09 Python
python 写一个文件分发小程序
Dec 05 #Python
解决Pymongo insert时会自动添加_id的问题
Dec 05 #Python
用python对oracle进行简单性能测试
Dec 05 #Python
python mongo 向数据中的数组类型新增数据操作
Dec 05 #Python
python自动从arxiv下载paper的示例代码
Dec 05 #Python
python使用dlib进行人脸检测和关键点的示例
Dec 05 #Python
python从ftp获取文件并下载到本地
Dec 05 #Python
You might like
基于php中使用excel的简单介绍
2013/08/02 PHP
Laravel5.1自定义500错误页面示例
2016/10/09 PHP
laravel实现一个上传图片的接口,并建立软链接,访问图片的方法
2019/10/12 PHP
有一段有意思的代码-javascript现实多行信息
2007/08/26 Javascript
W3C Group的JavaScript1.8 新特性介绍
2009/05/19 Javascript
javascript十个最常用的自定义函数(中文版)
2009/09/07 Javascript
js parseInt("08")未指定进位制问题
2010/06/19 Javascript
js 调用父窗口的具体实现代码
2013/07/15 Javascript
javascript搜索框效果实现方法
2015/05/14 Javascript
如何解决谷歌浏览器下jquery无法获取图片的尺寸
2015/09/10 Javascript
js实现获取两个日期之间所有日期的方法
2016/06/17 Javascript
gulp-uglify 与gulp.watch()配合使用时报错(重复压缩问题)
2016/08/24 Javascript
JS获取浮动(float)元素的style.left值为空的快速解决办法
2017/02/19 Javascript
Angular2 Service实现简单音乐播放器服务
2017/02/24 Javascript
canvas实现弧形可拖动进度条效果
2017/05/11 Javascript
详解Vue-cli 创建的项目如何跨域请求
2017/05/18 Javascript
五步轻松实现JavaScript HTML时钟效果
2020/03/25 Javascript
Bootstrap实现翻页效果
2017/11/27 Javascript
vue cli webpack中使用sass的方法
2018/02/24 Javascript
vue-router重定向不刷新问题的解决
2018/06/25 Javascript
Vue.js实现开发购物车功能的方法详解
2019/02/22 Javascript
手把手15分钟搭一个企业级脚手架
2019/09/16 Javascript
JavaScript交换变量的常用方法小结【4种方法】
2020/05/07 Javascript
[03:51]吞吞映像 每周精彩击杀top10第二弹
2014/06/25 DOTA
python开发利器之ulipad的使用实践
2017/03/16 Python
浅谈python常用程序算法
2019/03/22 Python
Python PyPDF2模块安装使用解析
2020/01/19 Python
python 如何将office文件转换为PDF
2020/09/22 Python
Python进行特征提取的示例代码
2020/10/15 Python
CSS3教程(9):设置RGB颜色
2009/04/02 HTML / CSS
关于html字符串正则判断和匹配的具体使用
2019/12/12 HTML / CSS
《在大海中永生》教学反思
2014/02/24 职场文书
市场营销专业毕业生求职信
2014/07/21 职场文书
酒店员工辞职信范文
2015/02/28 职场文书
2015年全国爱眼日活动方案
2015/05/05 职场文书
婚宴致辞
2015/07/28 职场文书