zoukankan      html  css  js  c++  java
  • mongodb数据库常用操作的整理

    这是个人在项目中抽取的代码,自己写的utils的通用模块,使用的框架是tronado,包括了数据库的认证,以及增删改查排序,如有特别需要可以联系我或者自己扩展,刚学python不久,仅供参考,例子如下。

    # -*- coding: utf-8 -*-
    import pymongo
    import logging
    from bson.objectid import ObjectId
    
    from etc.config import *
    conf_log = logging
    
    
    class DatabaseAPI(object):
        def __init__(self):
            super(DatabaseAPI, self).__init__()
            self.log = logging
    
            # MongoDB info set in config
            self.mg_host = mgHost
            self.mg_port = str(mgPort)
            self.mg_username = mgUsername
            self.mg_password = mgPassword
            self.mg_database = mgDatabase
            self.mg_auth_method = mgAuthMethod
            self.mg_client = None
            self.mg_conn = None
    
            # Login mongoDB
            self.mg_client = pymongo.MongoClient("mongodb://%s:%s" % (mgHost, mgPort))
            self.mg_conn = self.mg_client[self.mg_database]
            if self.mg_username or self.mg_password:
                auth_method = mgAuthMethod if mgAuthMethod else 'DEFAULT'
                self.mg_conn.authenticate(mgUsername, mgPassword, mechanism=auth_method)
    
        def login_mongodb(self):
            # Login mongodb using or not using authentication
            self.mg_client = pymongo.MongoClient("mongodb://%s:%s" % (mgHost, mgPort))
            self.mg_conn = self.mg_client[self.mg_database]
            if self.mg_username or self.mg_password:
                auth_method = mgAuthMethod if mgAuthMethod else 'DEFAULT'
                self.mg_conn.authenticate(mgUsername, mgPassword, mechanism=auth_method)
            return self.mg_conn
    
        def std_filter_exp(self, filter_exp):
            # Standardize filter expression
            self.log.error("Filter_exp before modified: " + str(filter_exp))
            if filter_exp:
                if filter_exp.get("_id"):
                    if isinstance(filter_exp["_id"], str) 
                            or isinstance(filter_exp["_id"], unicode):
                        filter_exp["_id"] = ObjectId(str(filter_exp["_id"]))
                    elif isinstance(filter_exp["_id"], dict):
                        if filter_exp["_id"].get("$in"):
                            filter_exp["_id"]["$in"] = [ObjectId(str(doc_id)) for doc_id in filter_exp["_id"]["$in"]]
            self.log.error("Filter_exp after modified: " + str(filter_exp))
            return filter_exp
    
        def stdout_documents(self, documents):
            # Standardize content of expression
            self.log.debug("Output before modified: " + str(documents))
            for document in documents:
                if document.get("_id"):
                    document["_id"] = str(document["_id"])
            self.log.debug("Output after modified: " + str(documents))
            return documents
    
        def stdin_documents(self, documents):
            # Standardize content of expression
            self.log.debug("Input before modified: " + str(documents))
            if isinstance(documents, (list, tuple)):
                for document in documents:
                    if document.get("_id"):
                        document["_id"] = ObjectId(str(document["_id"]))
                self.log.debug("Input after modified: " + str(documents))
            else:
                documents = [documents]
            return documents
    
        def mongo_find(self, collection, filter_exp=None, projection=None, skip=0, limit=0, sort=None):
            # Find documents in certain collection
            self.log.debug("MongoDB find: %s, %s, %s, %s, %s, %s" %
                           (str(collection), str(filter_exp), str(projection), str(skip), str(limit), str(sort)))
            mg_col = self.mg_conn[collection]
            filter_exp = self.std_filter_exp(filter_exp)
            result = mg_col.find(filter=filter_exp, projection=projection, skip=skip, limit=limit, sort=sort)
            db_resource = self.stdout_documents([section for section in result])
            return db_resource
    
        def mongo_insert(self, collection, documents, ordered=False):
            # Insert documents into certain collection
            mg_col = self.mg_conn[collection]
            documents = self.stdin_documents(documents)
            result = mg_col.insert_many(documents, ordered)
            return result
    
        def mongo_update(self, collection, filter_exp, update_exp, upsert=False):
            # Update documents matching certain filter
            mg_col = self.mg_conn[collection]
            filter_exp = self.std_filter_exp(filter_exp)
            result = mg_col.update_many(filter_exp, update_exp, upsert)
            return result
    
        def mongo_delete(self, collection, filter_exp):
            # Delete documents matching the filter
            mg_col = self.mg_conn[collection]
            filter_exp = self.std_filter_exp(filter_exp)
            result = mg_col.delete_many(filter_exp)
            return result
  • 相关阅读:
    安全编码1
    VPP tips
    VPP概述汇总
    C语言安全编码摘录
    TCP-proxy
    Scipy Lecture Notes学习笔记(一)Getting started with Python for science 1.4. Matplotlib: plotting
    Scipy Lecture Notes学习笔记(一)Getting started with Python for science 1.3. NumPy: creating and manipulating numerical data
    Scipy Lecture Notes学习笔记(一)Getting started with Python for science 1.2. The Python language
    Scipy Lecture Notes学习笔记(一)Getting started with Python for science 1.1. Python scientific computing ecosystem
    25马5跑道,求最快的五匹马的需要比赛的次数
  • 原文地址:https://www.cnblogs.com/jingtyu/p/6801410.html
Copyright © 2011-2022 走看看