Я хочу создать слой доступа к данным для MongoDb, но я нашел два отличных примера. Первый с занятий:
class ProjectsDal:
def __init__(self):
# initializing the MongoClient, this helps to
# access the MongoDB databases and collections
self.client = MongoClient(host='localhost', port=27017)
self.database = self.client['projects']
def create(self, project):
if project is not None:
self.database.projects.insert(project.get_as_json())
else:
raise Exception("Nothing to save, because project parameter is None")
def read(self, project_id=None):
if project_id is None:
return self.database.projects.find({})
else:
return self.database.projects.find({"_id":project_id})
И второй с глобальными функциями и глобальными переменными:
#mdb_dal.py file
from pymongo import MongoClient, errors as mgex
try:
_MDB_CLIENT = MongoClient('localhost', 27017)
_MDB_DB = _MDB_CLIENT['db_test']
except mgex.PyMongoError as err:
print('Ocorreu um erro ao tentar conectar-se à base de dados\n', err)
raise
def single_insert_doc(collect: str, doc: dict):
try:
coll = _MDB_DB[collect]
return coll.insert_one(doc).inserted_id
except mgex.PyMongoError as err:
print('Ocorreu um erro ao tentar persistir os dados\n', err)
raise
Меня интересуют глобальные переменные _MDB_CLIENT
и _MDB_DB
во втором примере, потому что у них будет довольно долгое время жизни, потому что они глобальные. Таким образом, приложение будет постоянно поддерживать открытое соединение с базой данных.
Может ли это вызвать у меня проблемы? Какой из двух подходов наиболее рекомендуется?