2009-04-12 6 views

Respuesta

6

Usted puede utilizar la herramienta bulkloader.py:

La herramienta bulkloader.py incluye con el SDK de Python puede cargar datos en el almacén de datos de la aplicación . Con tan solo un poco de configuración, puede crear nuevas entidades de almacenamiento de datos a partir de archivos CSV.

+0

Con un poco de trabajo extra, incluso se puede cargar datos directos desde una base de datos SQL, o cualquier otra fuente de datos. –

3

No tengo la solución perfecta, pero le sugiero que pruebe el App Engine Console. App Engine Console es un complemento gratuito que le permite ejecutar un intérprete interactivo de Python en su entorno de producción. Es útil para la manipulación de datos únicos (como las importaciones de datos iniciales) por varias razones:

  1. Es el buen intérprete antiguo de lectura-evaluación-impresión. Puede hacer las cosas de una en una en lugar de tener que escribir el código de importación perfecto todo de una vez y ejecutarlo por lotes.
  2. Tiene acceso interactivo a su propio modelo de datos, por lo que puede leer/actualizar/eliminar objetos del almacén de datos.
  3. Tiene acceso interactivo a la API de recuperación de URL, por lo que puede extraer los datos pieza por pieza.

me sugieren algo como lo siguiente:

  1. Obtener su modelo de datos de trabajo en su entorno de desarrollo
  2. dividir sus registros CSV en trozos de menos de 1.000. Publíquelos en algún lugar como Amazon S3 o cualquier otra URL.
  3. Instale App Engine Console en su proyecto y empújelo hasta la producción
  4. Inicie sesión en la consola. (Solo los administradores pueden usar la consola, por lo que debe estar seguro. Incluso puede configurarla para que devuelva HTTP 404 a "capa" de usuarios no autorizados.)
  5. Para cada parte de su CSV:
    1. Uso URLFetch para tirar hacia abajo un fragmento de datos
    2. Utilice el built-in csv módulo para picar sus datos hasta que haya una lista de estructuras de datos útiles (más probable es una lista de listas o algo por el estilo)
    3. escribe un bucle for, iteración a través de cada estructura de cada uno de los datos en la lista:
      1. crear un objeto de datos con todas las propiedades correctas
      2. put() en el almacén de datos

Usted debe encontrar que después de una iteración a través de # 5, a continuación, puede copiar y pegar, o bien escribir funciones simples para acelerar su tarea de importación. Además, con la obtención y el procesamiento de sus datos en los pasos 5.1 y 5.2, puede tomarse su tiempo hasta estar seguro de que lo tiene perfecto.

(Nota , App Engine consola actualmente funciona mejor con Firefox.)

+0

En lugar de usar la consola de App Engine, sería mejor con el script remote_api_shell.py. Para obtener más información, consulte aquí: https://developers.google.com/appengine/docs/python/tools/remoteapi#Running_Remote_Shell –

0

la versión posterior de SDK de App Engine, se puede cargar mediante el appcfg.py

ver appcfg.py

2

Por usando API remota y operaciones en múltiples entidades. Voy a mostrar un ejemplo de NDB usando pitón, donde nuestro Test.csv contiene los siguientes valores separados con punto y coma:

1;2;3;4 
5;6;7;8 

En primer lugar tenemos que importar módulos:

import csv 
from TestData import TestData 
from google.appengine.ext import ndb 
from google.appengine.ext.remote_api import remote_api_stub 

entonces tenemos que crear remota de código auxiliar api:

remote_api_stub.ConfigureRemoteApi(None, '/_ah/remote_api', auth_func, 'your-app-id.appspot.com') 

Para obtener más información sobre el uso de API remota de echar un vistazo a this answer.

Luego viene el código principal, que básicamente hace las siguientes cosas:

  1. abre el archivo Test.csv.
  2. Establece el delimitador. Estamos usando punto y coma.
  3. Luego tiene dos opciones diferentes para crear una lista de entidades:
    1. Uso de las funciones de reducción de mapa.
    2. Uso de la lista de comprensión.
  4. Al final, el lote pone toda la lista de entidades.

Código principal:

# Open csv file for reading. 
with open('Test.csv', 'rb') as file: 
    # Set delimiter. 
    reader = csv.reader(file, delimiter=';') 

    # Reduce 2D list into 1D list and then map every element into entity. 
    test_data_list = map(lambda number: TestData(number=int(number)), 
      reduce(lambda list, row: list+row, reader) 
     ) 

    # Or you can use list comprehension. 
    test_data_list = [TestData(number=int(number)) for row in reader for number in row] 

    # Batch put whole list into HRD. 
    ndb.put_multi(test_data_list) 

La operación put_multi también se encarga de asegurarse a lote número apropiado de entidades en una sola solicitud HTTP POST.

Tenga una mirada en esta documentación para obtener más información:

Cuestiones relacionadas