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中将字典转换成其json字符串
Jul 16 Python
Python线程详解
Jun 24 Python
python学习之面向对象【入门初级篇】
Jan 21 Python
python实现自动网页截图并裁剪图片
Jul 30 Python
Python3数字求和的实例
Feb 19 Python
django mysql数据库及图片上传接口详解
Jul 18 Python
Python3中configparser模块读写ini文件并解析配置的用法详解
Feb 18 Python
Python定时器线程池原理详解
Feb 26 Python
python GUI库图形界面开发之PyQt5简单绘图板实例与代码分析
Mar 08 Python
django admin 根据choice字段选择的不同来显示不同的页面方式
May 13 Python
Django框架安装及项目创建过程解析
Sep 14 Python
Python如何解决secure_filename对中文不支持问题
Jul 16 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
星际争霸教主Flash的ID由来:你永远不会知道他之前的ID是www!
2019/01/18 星际争霸
MYSQL环境变量设置方法
2007/01/15 PHP
ThinkPHP模板判断输出Defined标签用法详解
2014/06/30 PHP
php实现计数器方法小结
2015/01/05 PHP
Mac OS下配置PHP+MySql环境
2015/02/25 PHP
php生成rss类用法实例
2015/04/14 PHP
php常用正则函数实例小结
2016/12/29 PHP
javascript实现仿银行密码输入框效果的代码
2007/12/13 Javascript
jQuery 淡出一个图像到另一个图像的实现代码
2013/06/12 Javascript
javascript实现限制上传文件大小
2015/02/06 Javascript
node.js 使用ejs模板引擎时后缀换成.html
2015/04/22 Javascript
JavaScript采用递归算法计算阶乘实例
2015/08/04 Javascript
bootstrap学习笔记之初识bootstrap
2016/06/21 Javascript
详解打造 Vue.js 可复用组件
2017/03/24 Javascript
javascript实现延时显示提示框效果
2017/06/01 Javascript
vue页面使用阿里oss上传功能的实例(一)
2017/08/09 Javascript
three.js加载obj模型的实例代码
2017/11/10 Javascript
bootstrap paginator分页插件的两种使用方式实例详解
2017/11/14 Javascript
微信小程序学习笔记之登录API与获取用户信息操作图文详解
2019/03/29 Javascript
nodejs实现百度舆情接口应用示例
2020/02/07 NodeJs
vue+iview框架实现左侧动态菜单功能的示例代码
2020/07/23 Javascript
JS页面动态绘图工具SVG,Canvas,VML介简介
2020/10/16 Javascript
用python读写excel的方法
2014/11/18 Python
python爬虫入门教程--利用requests构建知乎API(三)
2017/05/25 Python
Python配置mysql的教程(推荐)
2017/10/13 Python
python读取和保存视频文件
2018/04/16 Python
Python利用递归实现文件的复制方法
2018/10/27 Python
在Python中通过getattr获取对象引用的方法
2019/01/21 Python
Python之变量类型和if判断方式
2020/05/05 Python
HTML5 画布canvas使用方法
2016/03/18 HTML / CSS
碧欧泉法国官网:Biotherm法国
2019/10/23 全球购物
Miller Harris官网:英国小众香水品牌
2020/09/24 全球购物
Bath & Body Works阿联酋:在线购买沐浴和身体用品
2021/02/27 全球购物
某IT外企面试题-二分法求方程!看看大家的C++功底
2015/07/04 面试题
同事吵架检讨书
2014/02/05 职场文书
pytorch实现线性回归以及多元回归
2021/04/11 Python