Usa Cloud Firestore en modo Datastore

Firestore es una base de datos de documentos NoSQL diseñada para el ajuste de escala automático, el alto rendimiento y el desarrollo fácil de aplicaciones. Es la versión más reciente de Datastore y presenta varias mejoras con respecto a Datastore.

Recomendamos usar Firestore en el modo Datastore para las bases de datos que usarán principalmente las aplicaciones de App Engine. Para obtener más información sobre los modos de Firestore, consulta Elige entre el modo nativo y el modo Datastore.

En este documento, se describe cómo usar la Biblioteca cliente de Google Cloud para almacenar y recuperar datos en una base de datos en modo Datastore.

Requisitos previos y configuración

Sigue las instrucciones en "Hello, World!" para Python en App Engine a fin de configurar tu entorno y proyecto, y comprender cómo se estructuran las aplicaciones de Python en App Engine. Anota y guarda el ID del proyecto, ya que lo necesitarás para ejecutar la aplicación de muestra que se describe en este documento.

Clona el repositorio

Descarga (clona) la muestra:

git clone https://github.com/GoogleCloudPlatform/python-docs-samples
cd python-docs-samples/appengine/flexible/datastore

Edita la configuración del proyecto y ajusta las dependencias

Incluye la biblioteca google-cloud-datastore en requirements.txt. Esta es la biblioteca cliente del modo Datastore.

Flask==1.1.2
google-cloud-datastore==1.12.0
gunicorn==20.0.4

Código de la aplicación

La aplicación de muestra registra, recupera y muestra los IP de las visitantes. Puedes ver que una entrada de registro es una clase de dos campos simple que tiene el tipo visit y se guarda en modo Datastore con el comando put. Luego, las diez visitas más recientes se recuperan en orden descendente con el comando query().

@app.route('/')
def index():
    ds = datastore.Client()

    user_ip = request.remote_addr

    # Keep only the first two octets of the IP address.
    if is_ipv6(user_ip):
        user_ip = ':'.join(user_ip.split(':')[:2])
    else:
        user_ip = '.'.join(user_ip.split('.')[:2])

    entity = datastore.Entity(key=ds.key('visit'))
    entity.update({
        'user_ip': user_ip,
        'timestamp': datetime.datetime.utcnow()
    })

    ds.put(entity)
    query = ds.query(kind='visit', order=('-timestamp',))

    results = []
    for x in query.fetch(limit=10):
        try:
            results.append('Time: {timestamp} Addr: {user_ip}'.format(**x))
        except KeyError:
            print("Error with result format, skipping entry.")

    output = 'Last 10 visits:\n{}'.format('\n'.join(results))

    return output, 200, {'Content-Type': 'text/plain; charset=utf-8'}

Usa archivos index.yaml

La app de muestra realiza consultas sencillas. Las consultas más elaboradas del modo Datastore requieren uno o más índices, que debes especificar en un archivo index.yaml que subas junto con tu app. Este archivo puede crearse de forma manual o generarse automáticamente mientras se prueba tu app de forma local.

Pruebas locales

Si necesitas desarrollar y probar tu aplicación de forma local, puedes usar el emulador del modo Datastore.

Más información

Para obtener toda la información sobre el modo Datastore, incluidos los conceptos y las optimizaciones, consulta la documentación de Cloud Firestore en modo Datastore.