• Python 驱动 MongoDB 示例(PyMongo)


    Python 的MongoDB驱动 pymongo ,使用pip Install pymongo安装即可

    最近发现网上的很多实例已经过时了,在此自我探究记录下来。

    编写一个接口类来支持MongoDB的基本操作(连接数据库,添加文档,删除文档,更新文档,读取文档),代码基本功能已通过测试,但难免还有一些BUG,如果有,望指正,谢谢。

    测试环境 Centos7 Python3.6.3

    from pymongo import MongoClient
    from bson.objectid import ObjectId
    import syslog
    
    class MongoDriver(object):
        def __init__(self, ip='localhost', port=27017):
            """Init MongoDB Option.
                wait more option added.
            """
            self.ip = ip
            self.port = port
    
        def init_connect(self):
            """ Connect To MongoDB.
                return True or False.
            """
            try:
                self.client = MongoClient(self.ip, self.port)
            except Exception as e:
                syslog.syslog(syslog.LOG_ERR, "MongoClient Connect failed :  " + str(e))
                return False
            else:
                return True
    
        def init_db(self, db):
            """ Connect To MongoDB -> DB.
                return True or False.
            """
            try:
                self.db = self.client[db]
            except Exception as e:
                syslog.syslog(syslog.LOG_ERR, "MongoClient Getdb {db} failed:".format(db=db) + str(e))
                self.db = ""
                return False
            else:
                return True
    
        def init_collection(self, collection):
            """ Connect To MongoDB -> DB -> collection.
                return True or False.
            """
    
            try:
                self.collection = self.db[collection]
            except Exception as e:
                syslog.syslog(syslog.LOG_ERR,
                    "MongoClient GetCollection {collection} failed:".format(collection=collection) + str(e))
                self.collection = ""
                return False
            else:
                return True
        def format_id(self, object_id):
            """ 
                Format Id.
                return a dict.
            """
            return {'_id': ObjectId(object_id)}
    
        def insert_one(self, document):
            """ 
                Insert One Document To MongoDB.
                document must be a dict.
                return a dict with document's inserted_id or False when Error occured
            """
            if not isinstance(document, dict):
                raise TypeError
            try:
                return self.collection.insert_one(document).inserted_id
            except Exception as e:
                syslog.syslog(syslog.LOG_ERR,
                    "MongoClient Insert_one {document} failed:".format(document=document) + str(e))
                return False
    
        def insert_many(self, documents):
            """ 
                Insert Many Documents To MongoDB.
                documents must be a list.
                eveny document must be a dict.
                return a list with documents's inserted_ids or False when Error occured
            """
            if not isinstance(documents, list):
                raise TypeError
            for document in documents:
                if not isinstance(document, dict):
                    raise TypeError
            try:
                return self.collection.insert_many(documents).inserted_ids
            except Exception as e:
                syslog.syslog(syslog.LOG_ERR,
                    "MongoClient insert_many {document} failed:".format(document=document) + str(e))
                return False
    
        def find_one_by_id(self, object_id):
            """ 
                Find Result By Object_id.
                Return a dict with a document
            """
            if not isinstance(object_id, str):
                raise TypeError
            try:
                return self.collection.find_one(self.format_id(object_id))
    
            except Exception as e:
                syslog.syslog(syslog.LOG_ERR,
                    "MongoClient find_by_id {id} failed:".format(id=object_id) + str(e))
                return False
    
        def find_one_by_param(self, kws):
            """ 
                Find Document By Object_id.
                return a dict with a document
            """
            if not isinstance(kws, dict):
                raise TypeError
            try:
                return self.collection.find_one(kws)
            except Exception as e:
                syslog.syslog(syslog.LOG_ERR,
                    "MongoClient find_by_param {kws} failed:".format(kws=kws) + str(e))
                return False
    
        def find_many_by_param(self, kws):
            """ 
                Find Document By Object_id.
                return a cursor object with a or many document
            """
            if not isinstance(kws, dict):
                raise TypeError
            try:
                return self.collection.find(kws)
            except Exception as e:
                syslog.syslog(syslog.LOG_ERR,
                    "MongoClient find_by_param {kws} failed:".format(kws=kws) + str(e))
                return False
    
        def update_one_by_id(self, object_id, kws):
            """ 
                Update Document By Object_id.
                Return True or False
            """
            if not isinstance(kws, dict) :
                raise TypeError
    
            try:
                self.collection.update_one(self.format_id(object_id), {"$set": kws}, upsert=False)
            except Exception as e:
                syslog.syslog(syslog.LOG_ERR,
                    "MongoClient update_one_by_id failed:" + str(e))
                return False
            else:
                return True
        def update_one_by_param(self, condition, kws):
            """ 
                Update Document By Object_id.
                Return True or False
            """
            if not isinstance(condition, dict) or not isinstance(kws, dict):
                raise TypeError
            try:
                self.collection.update_one(condition, {"$set": kws}, upsert=False)
            except Exception as e:
                syslog.syslog(syslog.LOG_ERR,
                    "MongoClient update_one_by_param  failed:" + str(e))
                return False
            else:
                return True
    
        def update_many_by_param(self, condition, kws):
            """ 
                Update Document By Object_id.
                Return True or False
            """
            if not isinstance(condition, dict) or not isinstance(kws, dict):
                raise TypeError
            try:
                self.collection.update_many(condition, {"$set": kws}, upsert=False)
            except Exception as e:
                syslog.syslog(syslog.LOG_ERR,
                    "MongoClient update_many_by_param  failed:" + str(e))
                return False
            else:
                return True
    
        def remove_all(self):
            """ 
                Remove all documents from a collection .
                Return True or False
            """
            try:
                self.collection.remove()
            except Exception as e:
                syslog.syslog(syslog.LOG_ERR,
                    "MongoClient remove_all  failed:" + str(e))
                return False
            else:
                return True
    
        def remove_documents(self, kws):
            """ 
                Remove some documents from a collection .
                Return True or False
            """
            if not isinstance(kws, dict):
                raise TypeError
            try:
                self.collection.remove(kws)
            except Exception as e:
                syslog.syslog(syslog.LOG_ERR,
                    "MongoClient remove_documents  failed:" + str(e))
                return False
            else:
                return True
  • 相关阅读:
    平台建设-用户反馈跟踪模块(简单爬虫)
    Android Send event 汇总 (点击,滑动,两指操作 源码)
    uiautomator 获取控件,点击的原理
    自动化进程调用CommomService获取androidapi功能
    大快搜索“大数据与智慧城市”南京技术交流会成功举办
    系统架构都经历了怎样的演变?
    云计算的云数据安全与加密技术
    从服务端视角看高并发难题
    动态分配多任务资源的移动端深度学习框架
    详谈分布式系统缓存的设计细节
  • 原文地址:https://www.cnblogs.com/JansXin/p/7885767.html
Copyright © 2020-2023  润新知