Python OOP:如何与所有 类 共享 MongoDB 连接
Python OOP: how to share a MongoDB connection with all classes
我正在处理 Python
OOP 项目。我必须处理 MongoDB 交互,但我不想使用像 mongoengine
.
这样的 ODM
我想要的是与所有必须与之交互的 class 共享主 Mongo 连接。我认为使用主数据库 class 可能是个好主意,我有两个解决方案。
解决方案 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 class,我也只有一个主连接。
在解决方案 B 我每次导入都有一个新实例
我认为解决方案 A 是解决问题的正确方法。不是吗?它们是更好的方法吗?
Python 让这变得简单。有一个模块级全局变量:
client = MongoClient()
如果它在像 "my_db.py" 这样的模块中,那么在其他地方您可以像这样访问客户端:
from my_db import client
在其他编程语言中存在各种针对全局变量的偏见,但在 Python 中,这是在整个程序中共享对象的最简单方法。
我正在处理 Python
OOP 项目。我必须处理 MongoDB 交互,但我不想使用像 mongoengine
.
ODM
我想要的是与所有必须与之交互的 class 共享主 Mongo 连接。我认为使用主数据库 class 可能是个好主意,我有两个解决方案。
解决方案 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 class,我也只有一个主连接。
在解决方案 B 我每次导入都有一个新实例
我认为解决方案 A 是解决问题的正确方法。不是吗?它们是更好的方法吗?
Python 让这变得简单。有一个模块级全局变量:
client = MongoClient()
如果它在像 "my_db.py" 这样的模块中,那么在其他地方您可以像这样访问客户端:
from my_db import client
在其他编程语言中存在各种针对全局变量的偏见,但在 Python 中,这是在整个程序中共享对象的最简单方法。