Utilizzare Firestore

Firestore è un database di documenti NoSQL creato per offrire scalabilità automatica, prestazioni elevate e facilità di sviluppo delle applicazioni. In quanto successore di Datastore, Firestore è il database consigliato per tutte le nuove applicazioni. Firestore offre più interfacce, tra cui un'API compatibile con Datastore per supportare il codice legacy creato su Datastore.

Questo documento descrive come utilizzare le librerie client Cloud per archiviare e recuperare dati in un database in modalità Datastore. Puoi utilizzare l'applicazione di esempio in questa guida per qualsiasi versione supportata di Python specificando la versione del runtime e il sistema operativo nel file app.yaml.

Prerequisiti e configurazione

  • Configura il tuo ambiente e il tuo progetto per capire come sono strutturate le app in App Engine. Annota e salva l'ID progetto, perché ti servirà per eseguire l'applicazione di esempio descritta in questo documento.

Clona il repository

Scarica (clona) l'esempio:

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

Modifica la configurazione del progetto e imposta le dipendenze

Includi la libreria google-cloud-datastore nel file requirements.txt. Questa è la libreria client per la modalità Datastore.

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

Codice dell'applicazione

L'applicazione di esempio registra, recupera e mostra gli IP dei visitatori. Puoi notare che una voce di log è una classe a due campi a cui viene assegnato il tipo visit e viene salvata in modalità Datastore utilizzando il comando put. Vengono quindi recuperate le dieci visite più recenti in ordine decrescente utilizzando il 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"}

Utilizzo di file index.yaml

L'app di esempio esegue query. Le query in modalità Datastore più elaborate richiedono uno o più indici, che devi specificare in un index.yamlfile che carichi insieme alla tua app. Questo file può essere creato manualmente o generato automaticamente durante il test dell'app in locale.

Test locale

Se devi sviluppare e testare la tua applicazione localmente, puoi utilizzare l'emulatore della modalità Datastore.

Per ulteriori informazioni

Per informazioni complete sulla modalità Datastore, inclusi ottimizzazioni e concetti, consulta la documentazione di Firestore in modalità Datastore.