【Python学习】操作Mongodb

#!/usr/bin/env python # encoding: utf-8 """ 数据库操作 """ import pymongo from pymongo.errors import ServerSelectionTimeoutError from mgr.common.logger import * from mgr.common.utils import ssh_connect_with_output def mongodb_connect(host, db_name, port=27017, user_name=None, password=None, mechanism=None, retry_count=300): """ 连接MongoDB数据库 :param host: MongoDB ip地址 :param db_name: 数据库名 :param port: 端口 :param user_name: 用户名 :param password: 密码 :param mechanism: 加密方式 'SCRAM-SHA-1' or 'MONGODB-CR' :return: client """ client = pymongo.MongoClient(host=host, port=int(port)) for i in range(retry_count): # 防止mgr重启导致数据库无法连接 try: # 连接MGR数据库 # if db_name == 'sangfor_edr': # client.sangfor_edr.authenticate(user_name, password, mechanism=mechanism) _, ret = ssh_connect_with_output(ip=host, cmd='iptables -F;iptables -nvL', timeout=5) LOG_DEBUG('当前mgr iptables情况: {}'.format(ret)) if user_name or password or mechanism: client[db_name].authenticate(user_name, password, mechanism=mechanism) except ServerSelectionTimeoutError: LOG_DEBUG('cannot connect mgr comgodb: {}, loop and temp to connect'.format(host)) # 调试数据库连接不上原因 _, ret = ssh_connect_with_output(ip=host, cmd='ps -ef|grep mongo', timeout=5) LOG_DEBUG('当前mgr MongoDB进程情况: {}'.format(ret)) _, ret = ssh_connect_with_output(ip=host, cmd='/sf/edr/manager/bin/eps_services status;', timeout=5) LOG_DEBUG('当前mgr eps_services启动情况: {}'.format(ret)) if i % 15 == 0 and i != 0: # 在ea前置有时没有更改成功,在mgr层修改一次 ssh_connect_with_output(ip=host, cmd="sed -i 's|bind_ip = 127.0.0.1|bind_ip = 0.0.0.0|' /ac/dc/ldb/bin/mongo_config/mongo.conf" ";/sf/edr/manager/bin/eps_services restart;sleep 10;iptables -F;iptables -nvL", timeout=15) time.sleep(15) except Exception as e: LOG_DEBUG('auth failed', e) time.sleep(15) else: LOG_DEBUG('connect comgodb: {} success'.format(host)) return client return False def mongodb_close(client): """ MongoDB断开连接 :param client:MongoDB client :return: """ try: client.close() except Exception as e: LOG_DEBUG(e) def clear_collection_data(db, collection_name): for i in range(30): # 防止并发,其他节点重启mgr导致数据库连接失败 try: result = db[collection_name].delete_many(filter={}) LOG_DEBUG('清空{}集合的所有数据!影响数量:{}'.format(collection_name, result.deleted_count)) except Exception as e: LOG_DEBUG('数据库操作报错原因: {}'.format(e)) LOG_DEBUG('sleep 20s, and retry') time.sleep(20) else: return result if __name__ == '__main__': client = mongodb_connect(host='111.111.111.111', db_name='testr', port=27017, user_name='test', password='test', mechanism='SCRAM-SHA-1') # cur_count =client['sangfor_edr']['soft_agent_info'].find().count() # print cur_count # print client['sangfor_edr']['link_devices'].delete_many(filter={'type': 'SOC'}) # client['sangfor_edr']['agent_info'].update_many(filter={}, update={'$set': {'patch_upgrade_state': 0}}) # client = mongodb_connect(host='10.186.0.1', db_name='edrFuerNew', port=27017)['edrFuerNew'] # db = client['sangfor_edr'] # device_registration = db['device_registration'] # ret = device_registration.find({"ip_address": {"$ne": "10.186.0.200"}}, {'_id': 1}) # for i in ret: # print i['_id'] # ret = db['leak_info_log'].update_many(filter={}, update={"$set":{"create_time": long(1557408411)}}) # print ret.matched_count # clear_collection_data(db, 'patch_agent_log')
作者:gtea
博客地址:https://www.cnblogs.com/gtea
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!