Gli oggetti dati in Datastore sono noti come entità, ognuna delle quali è classificata
in base a un particolare tipo ai fini delle query. Ad esempio, se stai scrivendo un'applicazione per le risorse umane, potresti rappresentare ogni dipendente con un'entità di tipo Employee
. Tieni presente che i valori dei dati delle entità
sono sotto forma di
proprietà.
Per saperne di più sulle entità, consulta la documentazione relativa ai percorsi degli antenati e alle transazioni.
Creazione di entità e impostazione di proprietà
Crea un'entità e un set chiamando il metodo costruttore per la relativa classe del modello. Per informazioni sulla creazione di una classe di modello di entità, consulta Creazione e utilizzo di classi di modello di entità.
L'esempio seguente mostra come richiamare un costruttore di classe modello con argomenti con parole chiave:
Questo codice crea un oggetto nella memoria principale del programma. Tuttavia, tieni presente che
l'entità scompare al termine del processo, quindi devi anche renderla persistente
in Datastore chiamando put()
, come segue:
Tieni presente che viene restituita una chiave che puoi utilizzare per recuperare l'entità da Datastore in un secondo momento.
Imposta le proprietà utilizzando una delle seguenti opzioni:
- Specifica le proprietà dell'entità al costruttore con gli argomenti delle parole chiave:
- Imposta manualmente le proprietà dopo la creazione dell'entità:
- Utilizza il metodo pratico
populate()
per impostare più proprietà in un'unica operazione:
Indipendentemente dal modo in cui scegli di impostare le proprietà dell'entità, i tipi di proprietà (in questo
caso, StringProperty
e IntegerProperty
) applicano il controllo dei tipi.
Ad esempio:
...
Recupero di entità dalle chiavi
Se hai la chiave di un'entità, puoi recuperarla da Datastore:
I metodi Key kind()
e id()
recuperano il tipo e l'identificatore dell'entità
dalla chiave:
Puoi anche utilizzare la chiave di un'entità per ottenere una stringa codificata adatta all'incorporamento in un URL:
In questo modo si ottiene un risultato come agVoZWxsb3IPCxIHQWNjb3VudBiZiwIM
, che in un secondo momento
può essere utilizzato per ricostruire la chiave e recuperare l'entità originale:
Tieni presente che la stringa sicura per gli URL sembra criptica, ma non è criptata. Può essere decodificato facilmente per recuperare il tipo e l'identificatore dell'entità originale:
key = Key(urlsafe=url_string) kind_string = key.kind() ident = key.id()
Se utilizzi queste chiavi sicure per gli URL, non utilizzare dati sensibili come gli indirizzi email come identificatori di entità. Una possibile soluzione sarebbe utilizzare un hash dei dati sensibili come identificatore. In questo modo, le terze parti, che possono vedere le chiavi criptate, non possono utilizzarle per raccogliere indirizzi email, anche se non viene impedito loro di generare in modo indipendente il proprio hash di un indirizzo email noto e di utilizzarlo per verificare se l'indirizzo è presente in Datastore.
Aggiornamento delle entità
Per aggiornare un'entità esistente, recuperala da Datastore, modifica le relative proprietà e archiviala di nuovo:
In questo caso, puoi ignorare il valore restituito da put()
, poiché una chiave dell'entità
non cambia quando la aggiorni.
Eliminazione di entità
Quando un'entità non è più necessaria, puoi rimuoverla da
Datastore con il metodo delete()
della chiave:
Tieni presente che si tratta di un'operazione sulla chiave, non sull'entità stessa. Restituisce sempre None
.
Eliminazione di entità in blocco
Se devi eliminare un numero elevato di entità, ti consigliamo di utilizzare Dataflow per eliminare le entità in blocco.
Utilizzo delle operazioni batch
Puoi elaborare una raccolta di entità o chiavi in una singola chiamata anziché singolarmente in chiamate separate, ad esempio all'interno di un ciclo. In questo modo, viene effettuata una sola chiamata di procedura remota (RPC) per il batch, anziché una chiamata RPC separata per ogni entità.
Il seguente codice mostra come eseguire questa operazione:
Nel codice precedente, passi un elenco di oggetti chiave a ndb.get_multi
per recuperare più entità in un batch; ndb.get_multi
restituisce un elenco di oggetti entità, con valori None
per le chiavi che non hanno un'entità corrispondente in Datastore. In questo modo, il recupero delle entità comporta
un minor numero di chiamate a Datastore per l'intero batch. Il numero di
chiamate per batch dipende dalle impostazioni delle dimensioni del batch.