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