1. # coding:utf-8
  2. """
  3. mongo操作工具
  4. """
  5.  
  6. from pymongo import MongoClient
  7. MONGO_HOST, MONGO_PORT, MONGO_DB, MONGO_TABLE = '127.0.0.1', '', 'test_db', 'teat_tb'
  8.  
  9. class MongoUtils:
  10. """
  11. 链接mongoDB,进行各种操作
  12. """
  13. def __init__(self, host=MONGO_HOST, port=MONGO_PORT, db_name=MONGO_DB):
  14. """
  15. 初始化对象,链接数据库
  16. :param host: mongo数据库所在服务器地址
  17. :param port: mongo数据库端口
  18. :param db_name: 数据库的名称
  19. :return: 无返回值
  20. """
  21. try:
  22. self.client = None
  23. self.client = MongoClient(host, port)
  24. self.database = self.client.get_database(db_name)
  25. self.collection = None
  26. except Exception as e:
  27. self.close_conn()
  28. print('init mongo bar failed: %s' % e)
  29.  
  30. def change_collection(self, table_name=MONGO_TABLE):
  31. """切换表"""
  32. self.collection = self.database.get_collection(table_name)
  33.  
  34. def count_info(self, table_name=MONGO_TABLE, filter_dict=None):
  35. """
  36. 查找表记录条数,默认返回0
  37. :param table_name: str 表名
  38. :param filter_dict: dict 过滤条件
  39. :return: int 表记录条数
  40. """
  41. tab_size = 0
  42. try:
  43. self.collection = self.database.get_collection(table_name)
  44. tab_size = self.collection.find(filter_dict).count()
  45. return tab_size
  46. except Exception as e:
  47. print('get table size failed: %s' % e)
  48. finally:
  49. return tab_size
  50.  
  51. def update_info(self, filter_dict, update_dict, insert=False, multi=False):
  52. """
  53. 更新表记录,默认返回false
  54. :param filter_dict: dict 过滤条件,如{'campaignId':{'$in':[1,2,3]}}
  55. :param update_dict: dict 更新的字段,如{'$set':{status_key:0,'campaign.status':1},{'$unset':'campaign.name':'test_camp'}}
  56. :param insert: bool 如果需要更新的记录不存在是否插入
  57. :param multi: bool 是否更新所有符合条件的记录, False则只更新一条,True则更新所有
  58. :return: bool 是否更新成功
  59. """
  60. result = False
  61. try:
  62. self.collection.update(filter_dict, update_dict, insert, multi)
  63. result = True
  64. print("[INFO] update success!")
  65. except Exception as e:
  66. print('update failed: %s' % e)
  67. finally:
  68. return result
  69.  
  70. def insert_info(self, insert_date):
  71. """
  72. 更新表记录,默认返回false
  73. :param insert_date: dict 插入的数据,如{'campaignId':{'$in':[1,2,3]}}
  74. :return: bool 是否更新成功
  75. """
  76. result = False
  77. try:
  78. self.collection.insert(insert_date)
  79. result = True
  80. print("insert success!")
  81. except Exception as e:
  82. print('insert failed: %s' % e)
  83. finally:
  84. return result
  85.  
  86. def delete_info(self, filter_date):
  87. """
  88. 更新表记录,默认返回false
  89. :param filter_date: dict 删除数据的条件,如{'campaignId':{'$in':[1,2,3]}}
  90. :return: bool 是否更新成功
  91. """
  92. result = False
  93. try:
  94. self.collection.remove(filter_date)
  95. result = True
  96. print("remove success!")
  97. except Exception as e:
  98. print('remove failed: %s' % e)
  99. finally:
  100. return result
  101.  
  102. def find_one_info(self, filter_dict, return_dict):
  103. """
  104. 查找一条表记录,默认返回空字典
  105. :param filter_dict: dict 过滤条件如{'campaignId':123}
  106. :param return_dict: dict 返回的字段如{'campaign.status':1,'updated':1,'_id':0}
  107. :return: dict 查找到的数据
  108. """
  109. result = {}
  110. try:
  111. result = self.collection.find_one(filter_dict, return_dict)
  112. except Exception as e:
  113. print('find data failed: %s' % e)
  114. finally:
  115. return result
  116.  
  117. def find_multi_info(self, filter_dict, return_dict, limit_size=0, skip_index=0):
  118. """
  119. 查找多条表记录,默认返回空数组
  120. :param filter_dict: dict filter_dict: 过滤条件如{'campaignId':123}
  121. :param return_dict: dict 返回的字段如{'campaign.status':1,'updated':1,'_id':0}
  122. :param limit_size: int 限定返回的数据条数
  123. :param skip_index: int 游标位移
  124. :return: list 查询到的记录组成的列表,每个元素是一个字典
  125. """
  126. result = []
  127. try:
  128. if not limit_size:
  129. if not skip_index:
  130. result = self.collection.find(filter_dict, return_dict)
  131. else:
  132. result = self.collection.find(filter_dict, return_dict).skip(skip_index)
  133. else:
  134. if not skip_index:
  135. result = self.collection.find(filter_dict, return_dict).limit(limit_size)
  136. else:
  137. result = self.collection.find(filter_dict, return_dict).skip(skip_index).limit(limit_size)
  138. except Exception as e:
  139. print('find data failed: %s' % e)
  140. finally:
  141. return result
  142.  
  143. def close_conn(self):
  144. """
  145. 关闭数据库链接
  146. :return: 无返回值
  147. """
  148. if self.client:
  149. 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. 在windows系统下,配置vue项目一键启动文件

    我的项目由客户端.后台管理.数据库和服务器三部分组件,每次启动项目都要一个一个启动,挺麻烦的,现在写一个.bat文件来批处理命令. 这个是我的启动文件内容. 第一行运行的我wampServer服务器, ...

  2. java文件分割及合并

    分割设置好分割数量,根据源文件大小来把数据散到子文件中代码如下; package word; import java.io.File; import java.io.FileInputStream; ...

  3. mac自带功能超详细介绍

    mac自带的超实用的功能分享给大家,包含自带的Spotlight(聚焦) 计算器功能,预览的 PDF 压缩功能,切换同一应用的不同窗口等,让您的工作更加轻松. 1.Spotlight(聚焦) 计算器功 ...

  4. 敌兵布阵 HDU - 1166 板子题

    #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> ...

  5. python的优先级

    在编写程序时,我遇到麻烦!怎么找都找不到bug 最终我发现了是我搞错了运算符优先级 位运算要在加减后面(这可真奇怪) eg 10-10^11=11!!! 还是多加括号的好

  6. PGET,一个简单、易用的并行获取数据框架

    使用场景 当我们的服务收到一个请求后,需要大量调用下游服务获取业务数据,然后对数据进行转换.计算后,响应给请求方. 如果我们采用串行获取下游数据,势必会增加响应时长,降低接口的qps.如果是并行获取下 ...

  7. 54.Python中Meta类常见的配置

    对于一些模型级别的配置.我们可以通过在模型中定义一个类,叫做Meta.然后在这个类中添加一些属性来控制模型的作用. 注意:添加的这个类一定要是Meta,否者的话Django就会不能够识别. from ...

  8. Winform递归绑定树节点

    /// <summary> /// 绑定树节点 /// </summary> /// <param name="pid"></param& ...

  9. MySql快速入门(四)

    在之前我们对MySql已经有了基本的了解,接下来我们就来接触MySql的分库分表,请往下阅读: 分库分表之MyCat实现 分库分表介绍: 随着微服务这种架构的兴起,我们应用从一个完整的大的应用,切分为 ...

  10. 858. Prim算法求最小生成树(模板)

    给定一个n个点m条边的无向图,图中可能存在重边和自环,边权可能为负数. 求最小生成树的树边权重之和,如果最小生成树不存在则输出impossible. 给定一张边带权的无向图G=(V, E),其中V表示 ...