Ogni entità è identificata da una chiave univoca all'interno dell'istanza Datastore dell'applicazione e consiste di quanto segue:
- kind. In genere, il tipo è il nome della classe del modello a cui appartiene l'entità, ma puoi sostituirla con un'altra stringa eseguendo l'override del metodo classmethod
_get_kind()
. - identifier. Puoi specificare il tuo nome chiave come identificatore oppure consentire a Datastore di generare automaticamente un ID numerico intero.
Specifica il nome della tua chiave
Il seguente esempio crea implicitamente una chiave con un identificatore di stringa utilizzando il parametro denominato id
:
In alternativa, puoi impostare direttamente il nome della chiave:
Consentire a Datastore di generare un ID da utilizzare per la chiave
Questo codice mostra come utilizzare un ID generato automaticamente come chiave:
Utilizzo del percorso predecessore nella chiave
La sequenza di entità che inizia con un'entità base e che prosegue dall'elemento padre a quello secondario e conduce a una determinata entità costituisce il percorso predecessore di quell'entità. Un'entità, l'elemento principale, l'elemento padre dell'entità padre e così via in modo ricorsivo, sono i antenati dell'entità. Le entità in Datastore formano uno spazio gerarchico delle chiavi simile alla struttura gerarchica delle directory di un file system.
La chiave completa che identifica un'entità è composta da una sequenza di coppie tipo-identificatore che specificano il percorso dei predecessori e termina con quelli dell'entità stessa. Il metodo del costruttore per la classe Key
accetta una sequenza di tipi e
identificatori di questo tipo e restituisce un oggetto che rappresenta la chiave per l'entità corrispondente.
L'esempio seguente mostra un servizio di blogging che archivia i messaggi per revisione. I messaggi sono organizzati in account, mentre le revisioni si trovano sotto i messaggi.
...
Nell'esempio, ('Account', 'sandy@example.com')
, ('Message', 123)
e ('Revision', '1')
sono tutti esempi di coppie tipo-identificatore.
Nota che Message
non è una classe di modello, ma è utilizzato solo come mezzo per raggruppare
le revisioni, non per archiviare i dati.
Come mostrato nel codice campione, il tipo di entità è designato dall'ultima coppia nome-nome nell'elenco: ndb.Key('Revision', '1')
.
Utilizzo di parametri con nome
Puoi utilizzare il parametro denominato parent
per designare direttamente qualsiasi entità nel percorso
del predecessore. Tutte le seguenti notazioni rappresentano la stessa chiave:
Specifica di un'entità base
Per unentità base, il percorso predecessore è vuoto e la chiave è costituita esclusivamente dal tipo e dall'identificatore dell'entità.
Specifica di un'entità con predecessori
Per inserire un nuovo messaggio con le chiavi principali
Per le chiavi create con un elemento padre, il metodo parent()
restituisce una chiave
che rappresenta l'entità padre:
Utilizzo degli ID dei tasti numerici
Puoi creare un'entità senza specificare un ID; in questo caso il datastore genera automaticamente un ID numerico. Se scegli di specificare alcuni ID e poi consenti a Datastore di generare automaticamente alcuni ID, potresti violare il requisito per le chiavi univoche. Per evitare che questo accada, riserva un intervallo di numeri da utilizzare per scegliere gli ID o utilizza gli ID delle stringhe per evitare del tutto il problema.
Per prenotare un intervallo di ID, utilizza il metodo della classe allocate_ids()
della classe del modello:
- allo scopo di allocare un numero specifico di ID
- per allocare tutti gli ID fino a un determinato valore massimo.
Allocazione degli ID
Per allocare 100 ID per una determinata classe di modello MyModel
:
Per allocare 100 ID per le entità con chiave principale p
:
I valori restituiti, first
e last
, sono il primo e l'ultimo ID (inclusi)
allocati. Puoi utilizzarli per costruire chiavi nel seguente modo:
È garantito che queste chiavi non siano state restituite in precedenza dal generatore di ID interno del datastore, né lo saranno da chiamate future al generatore di ID interno. Tuttavia, il metodo allocate_ids()
non controlla
se gli ID restituiti sono presenti nel datastore; interagisce solo con
il generatore di ID.
Per allocare tutti gli ID fino a un determinato valore massimo:
Questo modulo garantisce che tutti gli ID minori o uguali a N
vengano considerati allocati. I valori restituiti, first
e last
, indicano l'intervallo di ID
prenotati da questa operazione. Il tentativo di prenotare gli ID già allocati non è un errore; in questo caso, first
indica il primo ID non ancora allocato e last
è l'ultimo ID assegnato.