Python使用pymongo模块操作MongoDB的方法示例

yipeiwu_com5年前Python基础

本文实例讲述了Python使用pymongo模块操作MongoDB的方法。分享给大家供大家参考,具体如下:

通过pymongo实现python对Mongodb的操作。

具体看python代码

#!/usr/bin/python
# coding=utf-8
#python实现对MongoDB的操作
#需要安装python2、pymongo、安装pymongo可能需要pip,logging打印日志
#改脚本主要功能就是每5秒改一次mongodb中存储的ip,5秒后再改回来
import pymongo
import logging
import datetime
import os
import time
import traceback
import sys,gc
# 初始化logging
logging.basicConfig(level=logging.NOTSET,
          format='%(asctime)s %(filename)s[line:%(lineno)d] [%(levelname)s] %(message)s',
          datefmt='%Y-%m-%d %H:%M:%S',
          filename='clear_screenshot_based_on_db.log',
          filemode='a')
# set to print log to console at the same time
console = logging.StreamHandler()
console.setLevel(logging.NOTSET)
formatter = logging.Formatter('%(asctime)s %(name)s [%(levelname)s] %(message)s')
console.setFormatter(formatter)
logging.getLogger('').addHandler(console)
class MongoDB_Util():
#写一个类,用于实例化pymongo对象以及对mongo的增删改查
  def __init__(self, user, password, host, port, database, max_pool_size=2):
    try:
      client = pymongo.MongoClient(host=host, port=port, maxPoolSize=max_pool_size)
#实例化对象,需要mongo的相关参数
      if client == None:
        logging.error(
          "MongoDB_Util.__init__ : Initialize mongodb client object error,host:%s port:%s" % (
            host, port))
        raise Exception("Initialize mongodb client object error")
      try:
        admin_db = client['admin']  #指定连接的库
        admin_db.authenticate(user, password) #身份验证
        self.persist_db = admin_db  #赋值属性,通过该属性执行其他操作
      except Exception as exp:
        logging.error(
          "MongoDB_Util.__init__ : Authtication failed,host:%s port:%s database:%s user:%s password:%s" %
          (host, port, database, user, password))
        raise exp
    except Exception as exp:
      logging.error(
        "MongoDB_Util.__init__ : Exception has occured : %s" % str(sys.exc_info()[1]))
      raise exp
  def update(self):
#update方法,对mongodb执行update操作
    tom = None
    try:
      if self.persist_db == None:
        logging.error('MongoDB_Util.delete : Persist object has not been initialised')
        raise Exception('Persist object has not been initialised')
      collection = self.persist_db['fuzzing_agent.configuration']  #链接fuzzing_agent.configuration表
      abc=collection.find({"default_value" : "10.10.1.179"})   #执行find命令
      for i in abc:
        tom = i["default_value"]
      if tom == "10.10.1.179":
    #判断该值是否为179,如果是则通过update改为134
        collection.update({"default_value" : "10.10.1.179"},
                 {'$set':{'default_value': '10.10.1.134'}})
        collection.update({"default_value" : "10.10.1.179:/run/media/root/disk01/fuzzing"},
                 {'$set':{"default_value" :"10.10.1.134:/run/media/root/disk01/fuzzing"}})
        logging.debug("179 > 134")
        time.sleep(5)
      else:
        collection.update({"default_value" : "10.10.1.134"},
                 {'$set':{'default_value': '10.10.1.179'}})
        collection.update({"default_value" : "10.10.1.134:/run/media/root/disk01/fuzzing"},
                 {'$set':{"default_value" :"10.10.1.179:/run/media/root/disk01/fuzzing"}})
        logging.debug("134 > 179")
        time.sleep(5)
      return
    except Exception as exp:
      logging.error('Mongodb_Util.delete : Exception has occured : ' + str(sys.exc_info()[1]))
      raise exp
def change_ip(mongodb_host) :
  result = False
  try :
    mongo_util = MongoDB_Util('username', 'password', mongodb_host, 27017, 'admin',max_pool_size = 2) #用户名,密码,mongodb的Ip,端口,连接库,连接池
    mongo_util.update()
    result = True
  except :
    logging.error('change_ip: Exception has occured : ' + traceback.format_exc())
  finally:
    return result
if __name__ == '__main__' :
  while True :
    try :
      if change_ip(mongodb_host = '127.0.0.1') :
        #mongodb的ip地址
        logging.debug('update is done !!!')
      else :
        logging.error('not update done')
    except :
      logging.error('main : Exception has occured : ' + traceback.format_exc())
    finally:
      logging.debug("one loop %s" %datetime.datetime.now())

更多关于Python相关内容感兴趣的读者可查看本站专题:《Python常见数据库操作技巧汇总》、《Python数学运算技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总

希望本文所述对大家Python程序设计有所帮助。

相关文章

Python获取当前脚本文件夹(Script)的绝对路径方法代码

Python脚本有一个毛病,当使用相对路径时,被另一个不同目录下的py文件中导入时,会报找不到对应文件的问题。感觉是当前工作目录变成了导入py文件当前目录。如果你有配置文件的读取操作,然...

对python多线程中互斥锁Threading.Lock的简单应用详解

对python多线程中互斥锁Threading.Lock的简单应用详解

一、线程共享进程资源 每个线程互相独立,相互之间没有任何关系,但是在同一个进程中的资源,线程是共享的,如果不进行资源的合理分配,对数据造成破坏,使得线程运行的结果不可预期。这种现象称为“...

Python统计单词出现的次数

题目: 统计一个文件中每个单词出现的次数,列出出现频率最多的5个单词。 前言: 这道题在实际应用场景中使用比较广泛,比如统计历年来四六级考试中出现的高频词汇,记得李笑来就利用他的编程技能...

Python3.6基于正则实现的计算器示例【无优化简单注释版】

Python3.6基于正则实现的计算器示例【无优化简单注释版】

本文实例讲述了Python3.6基于正则实现的计算器。分享给大家供大家参考,具体如下: # -*- coding:utf-8 -*- #!python3 import re impo...

NLTK 3.2.4 环境搭建教程

NLTK 3.2.4 环境搭建教程

本文记录了NLTK 3.2.4 环境搭建的方法,供大家参考,具体内容如下 系统环境:win7 32位 python:2.7.13,后改为3.6.1 安装NLTK 从网站下载,完成后双击安...