Python OOP : how to share a MongoDB connection with all classes

标签 python mongodb oop pymongo

我正在开发一个 Python OOP 项目。我必须处理 MongoDB 交互,但我不想使用像 mongoengine 这样的 ODM

我想要的是与所有必须与之交互的类共享一个主要的 Mongo 连接。我认为使用主 DB 类可能是一个好主意,我想到了两种解决方案。

解决方案 A 类(class)层面的联系

mydb.py

from pymongo import MongoClient

class MyMongoDB(object):

    _client = MongoClient('localhost', 27017)
    db = _client['name_of_the_db']

在其他类(class)中:

from mydb import MyMongoDB

class Foo(object):

    _db_collection = MyMongoDB.db.foo_collection

    def __init__(self):
       pass

    def set_data(self, data):
       Foo._db_collection.insert_one(data)

解决方案 A 实例级别的连接

mydb.py

from pymongo import MongoClient

class MyMongoDB(object):

    def __init__(self):
        _client = MongoClient('localhost', 27017)
        db = _client['name_of_the_db']

在其他类(class)中:

from mydb import MyMongoDB

class Foo(object):

    _db_collection = MyMongoDB().db.foo_collection

    def __init__(self):
       pass

    def set_data(self, data):
       Foo._db_collection.insert_one(data)

解决方案 A中,即使我在很多模块中导入 MongoDB 类,我也只有一个主连接。

解决方案 B中,每次导入都有一个新实例

我认为 解决方案 A 是解决问题的正确方法。不是吗?它们是更好的方法吗?

最佳答案

Python 让这一切变得简单。有一个模块级全局变量:

client = MongoClient()

如果它位于“my_db.py”之类的模块中,那么您可以在其他地方访问客户端,如下所示:

from my_db import client

在其他编程语言中对全局变量存在各种偏见,但在 Python 中,这是在整个程序中共享对象的最简单方法。

关于Python OOP : how to share a MongoDB connection with all classes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41314715/

相关文章:

java - 吗啡 : upsert on Object embedded in an array

javascript - 对象定义的两种方式——有什么区别?

c++ - 如何根据参数的类型实例化不同的类?

PHP & MySQL : confusion following code to determine new object's properties

mongodb - 使用 MongoDB 进行嵌套分组

python - 在给定值之后屏蔽 numpy 数组

javascript - 在 Selenium/PhantomJS 上执行 Javascript

python - 如何根据PEP8拆分多个命令?

java - Python/Selenium - 无法获取标签的 HREF 值

database - $or 查询时不使用 Mongodb 索引