Создание многоразового клиента хранилища данных для приложения с большими колбами - PullRequest
0 голосов
/ 12 мая 2019

Я хочу создать соединение с базой данных из приложения python flask с моим экземпляром хранилища данных на GCP. У меня есть файл services / db.py:

from google.cloud import datastore
from google.auth import compute_engine
from config import env
import os
import logging
import warnings

namespace = env.str('ENV')


class Datastore_Client():

    def context_local(self):
        datastore_client = datastore.Client(namespace=namespace)
        return datastore_client

    def context_test(self):
        project = env.str("GOOGLE_CLOUD_PROJECT")
        credentials = compute_engine.Credentials()
        datastore_client = datastore.Client(credentials=credentials, project=project, namespace='test')
        return datastore_client

    def context_live(self):
        datastore_client = datastore.Client(namespace=namespace)
        return datastore_client

    def get_datastore_client(self):
        contexts = {
            'local': self.context_local,
            'test': self.context_test,
            'appengine': self.context_live
        }

        context_func = contexts.get(env.str("CONTEXT"), self.context_local)

        return context_func()

    builtin_list = list

    def from_datastore(self, entity):
        if not entity:
            return None
        if isinstance(entity, list):
            entity = entity.pop()

        return entity

В моих модельных файлах я бы ссылался на клиента хранилища данных следующим образом:

from ..services.db import Datastore_Client
client = Datastore_Client().get_datastore_client()

, но при предоставлении этой ссылки во всех файлах, которые нуждаются в ней при запуске моего приложения, оно, похоже, ускоряет соединение с базой данных для каждого экземпляра, тогда как я хотел бы установить соединение в масштабе приложения.

Я рассмотрел контекст приложения, но с примером использования sqlite и разговором о разрыве соединения после того, как я не уверен, можно ли использовать такой же подход для хранилища данных.

1 Ответ

0 голосов
/ 14 мая 2019

Вы создаете объект каждый раз, когда вызываете Datastore_Client ().Похоже, вы хотите создать Singleton Datastore_Client и использовать его в файлах модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...