# coding:utf-8
"""
mongo操作工具
""" from pymongo import MongoClient
MONGO_HOST, MONGO_PORT, MONGO_DB, MONGO_TABLE = '127.0.0.1', '', 'test_db', 'teat_tb' class MongoUtils:
"""
链接mongoDB,进行各种操作
"""
def __init__(self, host=MONGO_HOST, port=MONGO_PORT, db_name=MONGO_DB):
"""
初始化对象,链接数据库
:param host: mongo数据库所在服务器地址
:param port: mongo数据库端口
:param db_name: 数据库的名称
:return: 无返回值
"""
try:
self.client = None
self.client = MongoClient(host, port)
self.database = self.client.get_database(db_name)
self.collection = None
except Exception as e:
self.close_conn()
print('init mongo bar failed: %s' % e) def change_collection(self, table_name=MONGO_TABLE):
"""切换表"""
self.collection = self.database.get_collection(table_name) def count_info(self, table_name=MONGO_TABLE, filter_dict=None):
"""
查找表记录条数,默认返回0
:param table_name: str 表名
:param filter_dict: dict 过滤条件
:return: int 表记录条数
"""
tab_size = 0
try:
self.collection = self.database.get_collection(table_name)
tab_size = self.collection.find(filter_dict).count()
return tab_size
except Exception as e:
print('get table size failed: %s' % e)
finally:
return tab_size def update_info(self, filter_dict, update_dict, insert=False, multi=False):
"""
更新表记录,默认返回false
:param filter_dict: dict 过滤条件,如{'campaignId':{'$in':[1,2,3]}}
:param update_dict: dict 更新的字段,如{'$set':{status_key:0,'campaign.status':1},{'$unset':'campaign.name':'test_camp'}}
:param insert: bool 如果需要更新的记录不存在是否插入
:param multi: bool 是否更新所有符合条件的记录, False则只更新一条,True则更新所有
:return: bool 是否更新成功
"""
result = False
try:
self.collection.update(filter_dict, update_dict, insert, multi)
result = True
print("[INFO] update success!")
except Exception as e:
print('update failed: %s' % e)
finally:
return result def insert_info(self, insert_date):
"""
更新表记录,默认返回false
:param insert_date: dict 插入的数据,如{'campaignId':{'$in':[1,2,3]}}
:return: bool 是否更新成功
"""
result = False
try:
self.collection.insert(insert_date)
result = True
print("insert success!")
except Exception as e:
print('insert failed: %s' % e)
finally:
return result def delete_info(self, filter_date):
"""
更新表记录,默认返回false
:param filter_date: dict 删除数据的条件,如{'campaignId':{'$in':[1,2,3]}}
:return: bool 是否更新成功
"""
result = False
try:
self.collection.remove(filter_date)
result = True
print("remove success!")
except Exception as e:
print('remove failed: %s' % e)
finally:
return result def find_one_info(self, filter_dict, return_dict):
"""
查找一条表记录,默认返回空字典
:param filter_dict: dict 过滤条件如{'campaignId':123}
:param return_dict: dict 返回的字段如{'campaign.status':1,'updated':1,'_id':0}
:return: dict 查找到的数据
"""
result = {}
try:
result = self.collection.find_one(filter_dict, return_dict)
except Exception as e:
print('find data failed: %s' % e)
finally:
return result def find_multi_info(self, filter_dict, return_dict, limit_size=0, skip_index=0):
"""
查找多条表记录,默认返回空数组
:param filter_dict: dict filter_dict: 过滤条件如{'campaignId':123}
:param return_dict: dict 返回的字段如{'campaign.status':1,'updated':1,'_id':0}
:param limit_size: int 限定返回的数据条数
:param skip_index: int 游标位移
:return: list 查询到的记录组成的列表,每个元素是一个字典
"""
result = []
try:
if not limit_size:
if not skip_index:
result = self.collection.find(filter_dict, return_dict)
else:
result = self.collection.find(filter_dict, return_dict).skip(skip_index)
else:
if not skip_index:
result = self.collection.find(filter_dict, return_dict).limit(limit_size)
else:
result = self.collection.find(filter_dict, return_dict).skip(skip_index).limit(limit_size)
except Exception as e:
print('find data failed: %s' % e)
finally:
return result def close_conn(self):
"""
关闭数据库链接
:return: 无返回值
"""
if self.client:
self.client.close()

python操作mongo实例的更多相关文章

  1. Python操作Mysql实例代码教程在线版(查询手册)_python

    实例1.取得MYSQL的版本 在windows环境下安装mysql模块用于python开发 MySQL-python Windows下EXE安装文件下载 复制代码 代码如下: # -*- coding ...

  2. Python操作Mysql实例代码教程在线版(查询手册)

    本文介绍了Python操作MYSQL.执行SQL语句.获取结果集.遍历结果集.取得某个字段.获取表字段名.将图片插入数据库.执行事务等各种代码实例和详细介绍,代码居多,是一桌丰盛唯美的代码大餐   实 ...

  3. 利用python操作mrjob实例---wordcount

       网上利用java实现mr操作实例相对较多,现将python实现mr操作实例---Wordcount分享如下: 在操作前,需要作如下准备: 1.确保linux系统里安装有python3.5,pyt ...

  4. python操作mongo脚本

    #!/usr/bin/python# -*- coding: utf-8 -*- import sysimport osimport jsonfrom pymongo import MongoClie ...

  5. Python操作Mongo数据库

    连接数据库 import pymongo # 连接到数据库,以下两种方式均可 client = pymongo.MongoClient(host='localhost', port=27017) cl ...

  6. python操作mysql实例

    #coding=utf-8 import MySQLdb # 打开数据库连接 db = MySQLdb.connect(host='localhost',user='root',passwd='',d ...

  7. python 操作mongo

    1. 导包: import pymongo 2. 建立连接 client = pymongo.MongoClient("127.0.0.1",27017) 3. 获取数据库 db ...

  8. python操作mongodb实例

    安装pymongo扩展 import pymongo; client = pymongo.MongoClient(host='10.48.176.170',port=27017); db = clie ...

  9. Python学习笔记(五)之Python操作Redis、mysql、mongodb数据库

    操作数据库 一.数据库 数据库类型主要有关系型数据库和菲关系型数据库. 数据库:用来存储和管理数的仓库,数据库是通过依据“数据结构”将数据格式化,以记录->表->库的关系存储.因此数据查询 ...

随机推荐

  1. 剑指offer-面试题9-用两个栈实现队列-栈和队列

    /* 题目: 用两个栈实现一个队列.队列声明如下. */ /* 思路: 将值压入stack1,再从stack1弹出到stack2,则为先进先出. appendTail时直接压入stack1即可,当st ...

  2. 使用faker 生成测试数据

    测试数据生成 faker基础使用 from faker import Faker f=Faker(locale='zh_CN') print(f.name()) address 地址 person 人 ...

  3. UVA12325-注意提高效率的思路

    题目大意:你有一个体积为N的箱子和两种数量无限的宝物.宝物1的体积为S1,价值为V1:宝物2的体积为S2,价值为V2.输入均为32位带符号的整数.你的任务是最多能装多少价值的宝物?   方法:其实也没 ...

  4. 在什么情况下,不写notify()或者notifyAll()就能唤醒被wait()阻塞的线程?

    之前再看java关于线程的某视频时,发现在JDK源码中,join()=join(0)=wait()=wait(0),但是视频中在join()了之后,并没有用notify()或者notifyAll()去 ...

  5. Selenium3+python自动化014-自动化常用设计模式页面对象模型 (Page Object)

    一.概 念: PO(Page Object)设计模式是一种面向对象(页面对象)的设计模式,将测试对象及单个的测试步骤封装在每个Page对象中,以page为单位进行管理. 二.优点可以使代码复用,降低维 ...

  6. C# 索引器的理解和使用

    概述 此部分内容引用自MSDN文档 使用索引器可以用类似于数组的方式为对象建立索引. get 取值函数返回值. set 取值函数分配值. this 关键字用于定义索引器. value 关键字用于定义 ...

  7. Eclispe WEB项目 转到 IDEA 后无法部署问题

    IDEA是个强大的IDE  这个就不用多说了 Eclispe 的Web项目  转到IDEA之后,开始部署会出现大量的问题 项目从SVN下载下来的时候,大概就是这个样 第一步是先设置  项目结构  也就 ...

  8. [Python]BeautifulSoup安装与使用

    1.BeautifulSoup简介 BeautifulSoup4和 lxml 一样,Beautiful Soup 也是一个HTML/XML的解析器,主要的功能也是如何解析和提取 HTML/XML 数据 ...

  9. java面试记录三:hashmap、hashtable、concurrentHashmap、ArrayList、linkedList、linkedHashmap、Object类的12个成员方法、消息队列MQ的种类

    口述题 1.HashMap的原理?(数组+单向链表.put.get.size方法) 非线程安全:(1)hash冲突:多线程某一时刻同时操作hashmap并执行put操作时,可能会产两个key的hash ...

  10. 记录 Docker 的学习过程 (日志篇)

    日志收集 elk 在node3上操作 docker pull sebp/elk:5610 node3# sysctl vm.max_map_count=262144 node3# docker run ...