Python使用pymongo模塊操作MongoDB的方法示例
本文實(shí)例講述了Python使用pymongo模塊操作MongoDB的方法。分享給大家供大家參考,具體如下:
通過(guò)pymongo實(shí)現(xiàn)python對(duì)Mongodb的操作。
具體看python代碼
#!/usr/bin/python
# coding=utf-8
#python實(shí)現(xiàn)對(duì)MongoDB的操作
#需要安裝python2、pymongo、安裝pymongo可能需要pip,logging打印日志
#改腳本主要功能就是每5秒改一次mongodb中存儲(chǔ)的ip,5秒后再改回來(lái)
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():
#寫一個(gè)類,用于實(shí)例化pymongo對(duì)象以及對(duì)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)
#實(shí)例化對(duì)象,需要mongo的相關(guān)參數(shù)
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'] #指定連接的庫(kù)
admin_db.authenticate(user, password) #身份驗(yàn)證
self.persist_db = admin_db #賦值屬性,通過(guò)該屬性執(zhí)行其他操作
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方法,對(duì)mongodb執(zhí)行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"}) #執(zhí)行find命令
for i in abc:
tom = i["default_value"]
if tom == "10.10.1.179":
#判斷該值是否為179,如果是則通過(guò)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,端口,連接庫(kù),連接池
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())
更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python常見數(shù)據(jù)庫(kù)操作技巧匯總》、《Python數(shù)學(xué)運(yùn)算技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python入門與進(jìn)階經(jīng)典教程》及《Python文件與目錄操作技巧匯總》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
python圖形用戶界面tkinter之標(biāo)簽Label的使用說(shuō)明
這篇文章主要介紹了python圖形用戶界面tkinter之標(biāo)簽Label的使用說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06
python的簡(jiǎn)單四則運(yùn)算語(yǔ)法樹可視化
這篇文章主要介紹了python的簡(jiǎn)單四則運(yùn)算語(yǔ)法樹可視化,這篇文章的內(nèi)容也很簡(jiǎn)單,就是給定一個(gè)四則運(yùn)算的表達(dá)式,畫出它的語(yǔ)法樹,需要的朋友可以參考下2023-04-04
python wav模塊獲取采樣率 采樣點(diǎn)聲道量化位數(shù)(實(shí)例代碼)
這篇文章主要介紹了python wav模塊獲取采樣率 采樣點(diǎn)聲道量化位數(shù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-01-01
Python自定義簡(jiǎn)單圖軸簡(jiǎn)單實(shí)例
這篇文章主要介紹了Python自定義簡(jiǎn)單圖軸簡(jiǎn)單實(shí)例,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01
使用rpclib進(jìn)行Python網(wǎng)絡(luò)編程時(shí)的注釋問(wèn)題
這篇文章主要介紹了使用rpclib進(jìn)行Python網(wǎng)絡(luò)編程時(shí)的注釋問(wèn)題,作者講到了自己在編寫服務(wù)器時(shí)要用unicode注釋等需要注意的地方,需要的朋友可以參考下2015-05-05

