【问题标题】:Class based Wrapper for Python Mongo基于类的 Python Mongo 包装器
【发布时间】:2017-03-17 03:26:33
【问题描述】:

我正在寻找一个基于类的包装器来在 python 中创建 mongo 连接并执行多个操作。我开始编写一些代码,但考虑是否有任何现有的包装器可用于类似的需求。

class MongoDbConn:

    def __init__(self):
        self.settings_mongo = {
            'username': DB_USERID_MONGO,
            'password': DB_PASSWORD_MONGO,
            'host': DB_HOST_MONGO + ":" + DB_PORT_MONGO,
            'database': DB_AUTH_NM_MONGO
        }
        self.mongo_client =\
            MongoClient("mongodb://{username}:{password}@"
                        "{host}/?authSource={database}".format(
                            **self.settings_mongo))

    def execute_operation(self, db_name, collection_name, query,
                          operation):
        assert operation in ["find", "find_one", "distinct"]
        db = self.mongo_client[db_name]
        collection = db[collection_name]
        rs = getattr(collection, operation)(query)
        return rs

    def find_one(self, db_name, collection_name, query):
        return self.execute_operation(self, db_name, collection_name, query,
                                      operation="find_one")

    def find(self, db_name, collection_name, query):
        TODO

    def delete(self, db_name, collection_name, query):
        TODO

    def ensure_index_if_not_exist(self, db_name, collection_name, query):
        TODO

    def distinct(self, db_name, collection_name, query):
        TODO

    def insert(self, db_name, collection_name, query):
        TODO

    def update(self, db_name, collection_name, query):
        TODO

所以在上面的例子中,我正在寻找一个与上面相同性质的通用库

【问题讨论】:

    标签: python pymongo


    【解决方案1】:

    我不明白您的代码有什么好处。它比直接使用 PyMongo 更复杂,可能更慢一些,但除此之外我看不到太多优势。只需使用 PyMongo。

    如果您正在寻找更高级别的 Python 与 MongoDB 接口,请考虑PyMODM,它在 Python 对象和 MongoDB 文档之间进行转换,有点像 Django ORM 对 SQL 行所做的。

    【讨论】:

    • 谢谢@A。杰西,我对 ORM 一点也不感兴趣。我想拥有通用功能,我应该能够在 mongo 中进行 CRUD 操作。能否请您告诉我代码会变慢的原因,以便我改进它。你想说我不应该使用 MongoClient。我从以下链接中获得了使用 MongoClient 的灵感 stackoverflow.com/questions/13959790/…
    • 只是不要直接创建 MongoDbConn,创建一个 MongoClient 并将其用于所有操作。这将需要更少的函数调用——因为如果你想find,你将直接调用 MongoClient 的 find 函数,而不是调用调用 MongoClient 的 find 的函数。也会更简单。无需将 MongoClient 包装在另一个调用 MongoClient 函数的类中。
    • 当然可以,所以我可以在全局级别上拥有mongo客户端。就像启动一样,可以用它来编写find等功能。感谢它的帮助
    猜你喜欢
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 2019-10-27
    • 1970-01-01
    • 1970-01-01
    • 2016-01-03
    • 2014-10-20
    相关资源
    最近更新 更多