Объект MongoClient как глобальная переменная - PullRequest
0 голосов
/ 24 апреля 2019

Я хочу создать слой доступа к данным для 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 во втором примере, потому что у них будет довольно долгое время жизни, потому что они глобальные. Таким образом, приложение будет постоянно поддерживать открытое соединение с базой данных.

Может ли это вызвать у меня проблемы? Какой из двух подходов наиболее рекомендуется?

...