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中使用pyhook实现键盘监控的例子
Jul 18 Python
python使用Queue在多个子进程间交换数据的方法
Apr 18 Python
详解在Python程序中使用Cookie的教程
Apr 30 Python
Python的Socket编程过程中实现UDP端口复用的实例分享
Mar 19 Python
python3制作捧腹网段子页爬虫
Feb 12 Python
Python3实现将本地JSON大数据文件写入MySQL数据库的方法
Jun 13 Python
python调用摄像头显示图像的实例
Aug 03 Python
python求质数的3种方法
Sep 28 Python
matplotlib实现热成像图colorbar和极坐标图的方法
Dec 13 Python
python中threading开启关闭线程操作
May 02 Python
解决numpy矩阵相减出现的负值自动转正值的问题
Jun 03 Python
python 如何设置守护进程
Oct 29 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快速url重写 更新版[需php 5.30以上]
2010/04/20 PHP
利用ThinkPHP内置的ThinkAjax实现异步传输技术的实现方法
2011/12/19 PHP
php.ini修改php上传文件大小限制的方法详解
2013/06/17 PHP
php抽象方法和普通方法的区别点总结
2019/10/13 PHP
在 Laravel 6 中缓存数据库查询结果的方法
2019/12/11 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
为jquery.ui.dialog 增加“自动记住关闭时的位置”的功能
2009/11/24 Javascript
Javascript面向对象编程
2012/03/18 Javascript
浅析jquery的作用与优势
2013/12/02 Javascript
node.js中的querystring.stringify方法使用说明
2014/12/10 Javascript
DOM节点的替换或修改函数replaceChild()用法实例
2015/01/12 Javascript
JS长整型精度问题实例分析
2015/01/13 Javascript
使用jQuery管理选择结果
2015/01/20 Javascript
jQuery实现html元素拖拽
2015/07/21 Javascript
jQuery蓝色风格滑动导航栏代码分享
2015/08/19 Javascript
JavaScript学习笔记之数组求和方法
2016/03/23 Javascript
jQuery封装的屏幕居中提示信息代码
2016/06/08 Javascript
easyui取消表单实时验证,提交时统一验证的简单实例
2016/11/07 Javascript
vue.js的提示组件
2017/03/02 Javascript
node.js中EJS 模板快速入门教程
2017/05/08 Javascript
js实现登录与注册界面
2017/11/01 Javascript
使用 electron 实现类似新版 QQ 的登录界面效果(阴影、背景动画、窗体3D翻转)
2018/10/23 Javascript
jQuery判断自定义属性data-val用法示例
2019/01/07 jQuery
layui表格数据重载
2019/07/27 Javascript
浅谈Scrapy框架普通反爬虫机制的应对策略
2017/12/28 Python
Python面向对象之多态原理与用法案例分析
2019/12/30 Python
Python中的面向接口编程示例详解
2021/01/17 Python
css3实现背景动态渐变效果
2019/12/10 HTML / CSS
中软国际Java程序员机试题
2012/08/19 面试题
店长岗位的工作内容
2013/11/12 职场文书
人力资源经理的岗位职责范本
2014/02/28 职场文书
小区文明倡议书
2014/05/16 职场文书
疾病防治方案
2014/05/31 职场文书
党员教师群众路线思想汇报范文
2014/10/28 职场文书
2016国庆促销广告语
2016/01/28 职场文书
SQL CASE 表达式的具体使用
2022/03/21 SQL Server