Python: 单例模式

from pprint import pprint
import pymongo
from bson.objectid import ObjectId


class DB(object):
    __mangoDbClient = None
    __instance = None
    __conn = None
    uri = "xxx"

    @property
    def __connection(self):
        self.__mangoDbClient = pymongo.MongoClient(self.uri)
        return self

    def __connect(self, sets):
        """
            sets: 选择需要链接的集合
        """

        self.__conn = self.__mangoDbClient[sets]
        return self

    def __new__(cls, *args, **kwargs):
        if cls.__instance is None:
            cls.__instance = object.__new__(cls)
        return cls.__instance

    def __call__(self, sets: str = None, filters: {} = None):
        return self.__connect(sets).find_one(filters)

    def __init__(self, database="zpqa_consistency"):
        self.__mangoDbClient = self.__connection.__mangoDbClient[database]

    @classmethod
    def transform_object(cls, filters: {}):
        if filters.get("_id"):
            filters["_id"] = ObjectId(filters["_id"])

        return filters

    def find_many(self, filters: {} = None, rules: {} = None):
        """
            filters: 过滤条件
            rules: 指定返回字段规则
        """

        return self.__conn.find(DB.transform_object(filters), rules)

    def find_one(self, filters: {} = None):
        """
            filters: 过滤条件
            rules: 指定返回字段规则
        """

        return self.__conn.find_one(DB.transform_object(filters))

    def find_regex(self, filters: str = None, regex: str = None, rules: {} = None):
        """
            filters: 过滤字段
            regex: 需要匹配的正则
            rules: 指定返回字段规则
        """

        return self.__conn.find({filters: {"$regex": regex}}, rules)


if __name__ == '__main__':
    # sets_name = "consistencyTask"
    # filters_name = {"code": "CC23022419351889"}
    # conn = DB()
    # result = conn(sets_name, filters_name)
    # pprint(result)

    # set_name = "consistencyTask"
    # filter_name = {"code": "CC23021209592309"}
    set_name = "user"
    # filter_name = {"_id": ObjectId("63e847006a244b6fde32ce85")}
    filter_name = {"_id": "63e847006a244b6fde32ce85"}
    conn = DB()
    resp = conn(set_name, filter_name)
    print(resp)

    # data = {"submissionId": "63b7016add19b7447977aac6"}     # 标准匹配
    # data2 = {"submissionId": {"$regex": "^(63b7)"}}         # 正则匹配
    # rule = {'elementType': 1, 'processFeatureIds': 1, 'processStepId': 1, 'submissionId': 1}

    # result = __conn.find_one({"submissionId": data2})
    # print(result)

    # res = conn.find_regex("submissionId", "^63b701")
    # for i in res:
    #     pprint(i)

    # res = __conn.find_many(data2, {})
    # for i in res:
    #     print(i)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值