Usa Firestore

Firestore es una base de datos de documentos NoSQL creada a fin de proporcionar ajuste de escala automático, alto rendimiento y facilidad para el desarrollo de aplicaciones. Como sucesor de Datastore, Firestore es la base de datos recomendada para todas las aplicaciones nuevas. Firestore ofrece varias interfaces, incluida una API compatible con Datastore para admitir código heredado compilado en Datastore.

En este documento, se describe cómo usar las bibliotecas cliente de Cloud para almacenar y recuperar datos en una base de datos en modo Datastore. Puedes usar la aplicación de muestra en esta guía para cualquier versión compatible de Python especificando la versión del entorno de ejecución y el sistema operativo en tu archivo app.yaml.

Requisitos previos y configuración

  • Configura tu entorno y proyecto para comprender cómo se estructuran las apps 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 establece las dependencias

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

Flask==3.1.3; python_version >= '3.9'
google-cloud-datastore==2.20.2
gunicorn==23.0.0

Código de la aplicación

La aplicación de muestra registra, recupera y muestra las IP de los visitantes. Puedes ver que una entrada de registro es una clase de dos campos que tiene el tipo visit y se guarda en modo Datastore mediante el comando put. Luego, se recuperarán las últimas diez visitas en orden descendente mediante 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.now(tz=datetime.timezone.utc),
        }
    )

    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. Las consultas más elaboradas del modo Datastore requieren uno o más índices, que debes especificar en un archivo index.yaml que subes junto con la app. Este archivo puede crearse de forma manual o generarse automáticamente mientras se prueba la app a nivel local.

Pruebas locales

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

Para obtener 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 Firestore en modo Datastore.