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

 

posted @ 2017-11-23 16:56  Jansora  阅读(1555)  评论(0编辑  收藏  举报