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 相关文章推荐
跟老齐学Python之for循环语句
Oct 02 Python
Python正则表达式非贪婪、多行匹配功能示例
Aug 08 Python
Python编程实现从字典中提取子集的方法分析
Feb 09 Python
python 读文件,然后转化为矩阵的实例
Apr 23 Python
pycharm 主题theme设置调整仿sublime的方法
May 23 Python
Python OpenCV处理图像之滤镜和图像运算
Jul 10 Python
Python 获取主机ip与hostname的方法
Dec 17 Python
基于python的Paxos算法实现
Jul 03 Python
python英语单词测试小程序代码实例
Sep 09 Python
Python进程间通信 multiProcessing Queue队列实现详解
Sep 23 Python
Python3.x+pyqtgraph实现数据可视化教程
Mar 14 Python
Python爬取网页信息的示例
Sep 24 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
桌面中心(三)修改数据库
2006/10/09 PHP
php4的session功能评述(二)
2006/10/09 PHP
PHP中限制IP段访问、禁止IP提交表单的代码
2011/04/23 PHP
WordPress主题中添加文章列表页页码导航的PHP代码实例
2015/12/22 PHP
PHP jpgraph库的配置及生成统计图表:折线图、柱状图、饼状图
2017/05/15 PHP
PHP策略模式定义与用法示例
2017/07/27 PHP
记录几个javascript有关的小细节
2007/04/02 Javascript
Document对象内容集合(比较全)
2010/09/06 Javascript
jQuery在ul中显示某个li索引号的方法
2015/03/17 Javascript
jQuery的几个我们必须了解的特点
2015/05/03 Javascript
Jquery promise实现一张一张加载图片
2015/11/13 Javascript
微信小程序 wx.request(接口调用方式)详解及实例
2016/11/23 Javascript
JQuery 获取多个select标签option的text内容(实例)
2017/09/07 jQuery
VUE2实现事件驱动弹窗示例
2017/10/21 Javascript
浅谈Vue.js中ref ($refs)用法举例总结
2017/12/19 Javascript
vue-router中的hash和history两种模式的区别
2018/07/17 Javascript
使用vue-cli脚手架工具搭建vue-webpack项目
2019/01/14 Javascript
微信小程序学习笔记之本地数据缓存功能详解
2019/03/29 Javascript
vue插槽slot的简单理解与用法实例分析
2020/03/14 Javascript
[56:35]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第一局
2016/03/06 DOTA
[01:38]女王驾到——至宝魔廷新尊技能&特效展示
2020/06/16 DOTA
Python如何实现文本转语音
2016/08/08 Python
python实现给scatter设置颜色渐变条colorbar的方法
2018/12/13 Python
PyCharm 2019.3发布增加了新功能一览
2019/12/08 Python
opencv resize图片为正方形尺寸的实现方法
2019/12/26 Python
python入门之基础语法学习笔记
2020/02/08 Python
pandas数据处理之绘图的实现
2020/06/15 Python
用CSS3实现瀑布流布局的示例代码
2017/11/10 HTML / CSS
浅谈html5标签css3的常用样式
2016/10/20 HTML / CSS
为什么Runtime.exec(“ls”)没有任何输出?
2014/10/03 面试题
在DELPHI中调用存储过程和使用内嵌SQL哪种方式更好
2016/11/22 面试题
普宁寺导游词
2015/02/04 职场文书
人民检察院起诉书
2015/05/20 职场文书
劳动仲裁代理词范文
2015/05/25 职场文书
SQLServer权限之只开启创建表权限
2022/04/12 SQL Server
台积电称即便经济低迷也没有降价的计划
2022/04/21 数码科技