• python操作mongo实例


    # coding:utf-8
    """
    mongo操作工具
    """
    
    from pymongo import MongoClient
    MONGO_HOST, MONGO_PORT, MONGO_DB, MONGO_TABLE = '127.0.0.1', '27017', '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()
  • 相关阅读:
    Django---Django的中间件
    Django---Django的ORM的一对多操作(外键操作),ORM的多对多操作(关系管理对象),ORM的分组聚合,ORM的F字段查询和Q字段条件查询,Django的事务操作,额外(Django的终端打印SQL语句,脚本调试)
    Django---ORM的常用字段和自定义字段,DjangoORM字段与数据库类型对应,字段参数和Meta的参数,Django的admin操作,13中orm操作方法,单标的双下方法
    Django---路由系统,URLconf的配置,正则表达式的说明(位置参数),分组命名(捕获关键字参数),传递额外的参数给视图,命名url和url的反向解析,url名称空间
    Django---CBV和FBV的使用,CBV的流程,给视图加装饰器,Request对象方法,属性和Response对象,form表单的上传
    Django---图书管理系统,多对多(ManyToMany),request获取多个值getlist(),反查(被关联的对象.author_set.all)
    Django---简易图书管理系统(B/S架构)
    从Base64编码转换为图片文件
    图片转化成base64字符串
    设置Linux的一些文本输出方式
  • 原文地址:https://www.cnblogs.com/smileyes/p/7866160.html
Copyright © 2020-2023  润新知