Python OOP:如何与所有类共享MongoDB连接

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

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

解决方案A.
在班级连接

mydb.py

from pymongo import MongoClient

class MyMongoDB(object):

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

在其他课程中:

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']

在其他课程中:

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中,这是在整个程序*享对象的最简单方法.

上一篇:pymongo操作教程


下一篇:pymongo问题集合