Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

211
Vistas
¿Cómo almacenar en caché los datos extraídos de BigQuery en Django?

Tengo una aplicación web que extrae datos de BigQuery a mis vistas de Django, que luego se pasarán como contexto a las plantillas de interfaz. Sin embargo, este proceso de extracción de datos ocurrirá inicialmente cuando abra la web y volverá a ocurrir cada vez que actualice la página. ¿Hay alguna forma de almacenar en caché los datos que extraje?

Mi código views.py se parece a esto:

 def index(request): client = bigquery.Client() dataset_id = "project-id.dataset-id" tables = client.list_tables(dataset_id) tables_list = [table.table_id for table in tables] data_list = [] for table_id in tables_list: query_string = f""" SELECT * FROM `project-id.dataset-id.{table_id}` """ query_job = ( client.query(query_string) .result() ) records = [dict(row) for row in query_job] data_list.extend(records) df = pd.DataFrame(data_list) ... # Data manipulation syntax here using pandas dataframe ... data_json = df.to_json(orient="records") context = {'data_json': data_json} return render(request, 'template_name', context)

Pasé los datos como un JSON al contexto porque los estoy pasando a una interfaz React.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Hay muchas formas de almacenar datos en caché en Django, aquí te mostraré la más rápida y eficiente según Django Doc : memcached

  1. Descargue e instale memcached: si está en Linux, descárguelo desde https://memcached.org/downloads . ./configure && make && sudo make install para instalar. Después de instalar Memcached, abra un shell e inícielo con el siguiente comando: memcached -l 127.0.0.1:11211

  2. Instale enlaces de Python: después de instalar Memcached, debe instalar sus enlaces de Python. Puedes usar pymemcache , pip install pymemcache .

  3. Agregue la configuración de memcached a su proyecto:

     CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.memcached.PyMemcacheCache', 'LOCATION': '127.0.0.1:11211', } }
  4. Niveles de caché: Django proporciona los siguientes niveles de almacenamiento en caché, enumerados aquí por orden ascendente de granularidad:

  • API de caché de bajo nivel: proporciona la mayor granularidad. Le permite almacenar en caché consultas o cálculos específicos.
  • Caché de plantilla: le permite almacenar en caché fragmentos de plantilla.
  • Caché por vista: proporciona almacenamiento en caché para vistas individuales.
  • Caché por sitio: el caché de más alto nivel. Almacena en caché todo tu sitio.
  1. Usando la API de caché de bajo nivel en su ejemplo:

vistas.py

 from django.core.cache import cache def index(request): # First, try to retrieve the cached data if exist cached_data_json = cache.get('cached_data_json') # If the data has not been cached yet, generate and cache it if not cached_data_json: client = bigquery.Client() dataset_id = "project-id.dataset-id" tables = client.list_tables(dataset_id) tables_list = [table.table_id for table in tables] data_list = [] for table_id in tables_list: query_string = f""" SELECT * FROM `project-id.dataset-id.{table_id}` """ query_job = ( client.query(query_string) .result() ) records = [dict(row) for row in query_job] data_list.extend(records) df = pd.DataFrame(data_list) ... # Data manipulation syntax here using pandas dataframe ... data_json = df.to_json(orient="records") # Cache the data cache.set('cached_data_json', data_json) context = {'data_json': data_json} return render(request, 'template_name', context)

Así es como funciona: si cached_data_json está presente en el caché, utilícelo; de lo contrario, realice un nuevo cálculo y guárdelo en el caché como cached_data_json .

OPCIONAL: puede usar django-memcache-status para monitorear Memcached .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda