Creazione, recupero, aggiornamento ed eliminazione delle entità

Gli oggetti di dati in Datastore sono noti come entità, ognuno dei quali è classificato di un determinato kind ai fini delle query. Per 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 dati dell'entità i valori sono sotto forma di proprietà. Per ulteriori informazioni sulle entità, consulta la documentazione percorsi predecessore e transazioni.

Creazione di entità e impostazione di proprietà

Puoi creare un'entità e impostarla chiamando il metodo costruttore per il relativo modello . Consulta Creazione e utilizzo delle classi del modello di entità per informazioni sulla creazione di una classe di modello entità.

L'esempio seguente mostra come richiamare un costruttore di una classe di modello con argomenti parole chiave:

sandy = Account(
    username='Sandy', userid=123, email='sandy@example.com')

Questo codice crea un oggetto nella memoria principale del tuo programma. Tuttavia, tieni presente che l'entità scompare quando il processo termina, quindi devi anche mantenere a Datastore, chiamando put(), come segue:

sandy_key = sandy.put()

Nota che restituisce una chiave che puoi utilizzare per Recupero dell'entità da Datastore in un secondo momento.

Imposta le proprietà utilizzando una delle seguenti opzioni:

  • Specifica le proprietà dell'entità per il costruttore con gli argomenti delle parole chiave:
    sandy = Account(
        username='Sandy', userid=123, email='sandy@example.com')
  • Imposta manualmente le proprietà dopo la creazione dell'entità:
    sandy = Account()
    sandy.username = 'Sandy'
    sandy.userid = 123
    sandy.email = 'sandy@example.com'
  • Utilizza il metodo di convenienza populate() per impostare più proprietà in una sola operazione:
    sandy = Account()
    sandy.populate(
        username='Sandy',
        userid=123,
        email='sandy@gmail.com')

Comunque scegli di impostare le proprietà dell'entità, i tipi di proprietà (in case, StringProperty e IntegerProperty) applicano il controllo del tipo.

Ad esempio:

bad = Account(
    username='Sandy', userid='not integer')  # raises an exception
...
sandy.username = 42  # raises an exception

Recupero di entità dalle chiavi

Se disponi della chiave di un'entità, puoi recuperarla da Datastore:

sandy = sandy_key.get()

I metodi chiave kind() e id() recuperano il tipo e l'identificatore dell'entità dalla chiave:

kind_string = sandy_key.kind()  # returns 'Account'
ident = sandy_key.id()  # returns '2'

Puoi anche utilizzare la chiave di un'entità per ottenere una stringa codificata adatta incorporamento in un URL:

url_string = sandy_key.urlsafe()

Questo genera un risultato come agVoZWxsb3IPCxIHQWNjb3VudBiZiwIM, che può in seguito da utilizzare per ricostruire la chiave e recuperare l'entità originale:

sandy_key = ndb.Key(urlsafe=url_string)
sandy = sandy_key.get()

Tieni presente che la stringa sicura per l'URL sembra crittografica, ma non è crittografata. Può facilmente decodificare 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 URL, non utilizzare dati sensibili quali come identificatori di entità. Una possibile soluzione utilizzare un hash dei dati sensibili come identificatore. Questa operazione impedisce alle terze parti, che possono vedere le chiavi criptate, di utilizzare raccogliere indirizzi email, anche se ciò non impedisce loro di generando autonomamente l'hash di un indirizzo email noto utilizzandolo per verificare se quell'indirizzo è presente in Datastore.

Aggiornamento delle entità

Per aggiornare un'entità esistente, recuperala da Datastore, modificarne le proprietà e memorizzarlo di nuovo:

sandy = key.get()
sandy.email = 'sandy@example.co.uk'
sandy.put()

In questo caso puoi ignorare il valore restituito da put(), poiché una chiave di entità non cambia quando lo aggiorni.

Eliminare entità

Quando un'entità non è più necessaria, puoi rimuoverla Datastore con il metodo delete() della chiave:

sandy.key.delete()

Tieni presente che si tratta di un'operazione sulla chiave, non sull'entità stessa. C'è sempre restituisce 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 un'unica chiamata anziché singolarmente in chiamate separate, ad esempio all'interno di un loop. Ciò porta una singola chiamata di procedura remota (RPC) per il batch, anziché una per ogni entità.

Il seguente codice mostra come fare:

list_of_keys = ndb.put_multi(list_of_entities)
list_of_entities = ndb.get_multi(list_of_keys)
ndb.delete_multi(list_of_keys)

Nel codice riportato sopra, passi un elenco di oggetti chiave a ndb.get_multi per il recupero 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. Ottenere le entità in questo modo di chiamate a Datastore per l'intero batch. (Il numero di per batch dipendono dalle impostazioni della dimensione del batch).