Nota: Gli sviluppatori che creano nuove applicazioni sono vivamente incoraggiati a utilizzare il Libreria client NDB, che offre numerosi vantaggi rispetto a questa libreria client, come la memorizzazione automatica nella cache delle entità tramite tramite Google Cloud CLI o tramite l'API Compute Engine. Se al momento utilizzi la libreria client DB precedente, leggi il Guida alla migrazione da DB a NDB
La classe Model
è la superclasse per le definizioni modello dei dati.
Model
è definito nel modulo google.appengine.ext.db
.
Introduzione
Un'applicazione definisce un modello dei dati definendo una classe che crea sottoclassi
Model
. Le proprietà del modello vengono definite utilizzando attributi di classe
e
Property
di Compute Engine. Ad esempio:
class Story(db.Model): title = db.StringProperty() body = db.TextProperty() created = db.DateTimeProperty(auto_now_add=True)
Un'applicazione crea una nuova entità dati creando un'istanza di una sottoclasse di
Model
. Le proprietà di un'entità possono essere assegnate utilizzando gli attributi dell'istanza,
o come argomenti delle parole chiave per il costruttore.
s = Story() s.title = "The Three Little Pigs" s = Story(title="The Three Little Pigs")
Il nome della sottoclasse del modello viene utilizzato come nome dell'entità Datastore
gentile. Datastore prenota tutti i nomi dei tipi che iniziano con due trattini bassi
(__
). Le sottoclassi del modello non devono utilizzare questi nomi.
I nomi degli attributi vengono utilizzati come nomi dei
su un'entità. Attributi di istanza di modello i cui nomi iniziano con un
il trattino basso (_
) viene ignorato, pertanto la tua applicazione può utilizzare
per archiviare dati su un'istanza del modello che non viene salvata
Datastore.
Datastore e l'API della classe del modello impongono diverse restrizioni alla proprietà i nomi degli utenti e gli attributi delle istanze del modello. Consulta Nomi di proprietà non consentiti per una descrizione completa.
Ogni entità ha un
chiave,
un identificatore univoco che rappresenta l'entità. La chiave può includere un campo facoltativo
nome chiave,una stringa univoca tra le entità del tipo specificato. La
il tipo e il nome della chiave dell'entità possono essere utilizzati con
Key.from_path()
e
Model.get_by_key_name()
per recuperare l'entità.
Un'entità può anche avere un elemento
principale
dell'oggetto. Modulo relazioni padre-figlio
gruppi di entità,
utilizzati per controllare la transazionalità e la località dei dati in Datastore.
Un'applicazione crea una relazione padre-figlio tra due entità
passando l'entità padre al costruttore dell'entità figlio, come
parent
argomento.
Il metodo
Model.get_or_insert()
può essere utilizzato per recuperare un'entità che potrebbe non esistere, creandola
Datastore, se necessario:
keyname = "some_key" s = Story.get_or_insert(keyname, title="The Three Little Pigs")
Nota: un'istanza di un modello non ha un'entità corrispondente in Datastore finché non viene scritta
(put)
per la prima volta, in modo esplicito o tramite
Model.get_or_insert()
.
Per creare un dict
che sia una copia dei dati di un'istanza del modello, utilizza
il
db.to_dict
personalizzata.
Costruttore
Il costruttore per la classe Model
è definito come segue:
- class Model (parent=None, key_name=Nessuno, **kwds)
-
La superclasse per le definizioni modello dei dati.
Durante la costruzione,
validate()
. Le eccezioni a queste chiamate si propagano ai chiamanti di questo come costruttore.Argomenti
- padre
- L'istanza o la chiave del modello dell'entità corrispondente alla nuova entità principale.
- key_name
-
Il nome della chiave per l'entità. Il nome diventa parte della definizione chiave. Se
None
, viene utilizzato un ID numerico generato dal sistema la chiave.Il valore di
key_name
non deve essere nel formato__*__
.Il nome della chiave viene memorizzato come stringa Unicode, con
str
convertiti in testo ASCII.Chiamata in corso
put()
su questo oggetto sovrascriverà qualsiasi entità Datastore esistente con la stessa chiave. - kwds
- Valori iniziali per le proprietà dell'istanza, come argomenti delle parole chiave. Ogni nome corrisponde a un attributo definito nella classe Model.
Argomento parola chiave aggiuntivo
- chiave
-
L'esplicita
Key
per l'entità. Non può essere utilizzato conkey_name
oparent
. SeNone
, utilizza di nuovo il comportamento perkey_name
eparent
. Utile quando si utilizzaallocate_ids()
per riservare ID numerici per le nuove entità.Il valore di
key
deve essere un numeroKey
in esecuzione in un'istanza Compute Engine.Chiamata in corso
put()
su questo oggetto sovrascriverà qualsiasi entità Datastore esistente con la stessa chiave.
Metodi della classe
La classe Model
prevede i seguenti metodi:
- Model.get (chiavi)
-
Recupera l'istanza (o le istanze) del modello per la chiave o le chiavi specificate. Le chiavi devono rappresentare entità del tipo del modello. Se una chiave fornita è non sono del tipo corretto,
KindError
viene sollevata un'eccezione.Questo metodo è simile al
db.get()
con un controllo aggiuntivo del tipo.Argomenti
- tasti
- Chiave di entità da recuperare, una rappresentazione stringa della chiave o un elenco di chiavi o relative rappresentazioni di stringa.
- read_policy
- Leggi il criterio che specifica il livello desiderato di coerenza dei dati:
- STRONG_CONSISTENCY
- Garantisce i risultati più recenti, ma limitati a una singola gruppo di entità.
- EVENTUAL_CONSISTENCY
- Può abbracciare più gruppi di entità, ma occasionalmente può ritornare i risultati obsoleti. In generale, le query a coerenza finale vengono eseguite è più veloce rispetto a query a elevata coerenza, ma non c'è alcuna garanzia.
Nota: le query globali (non predecessori) ignorano questo argomento.
- scadenza
- Tempo massimo, in secondi, di attesa che Datastore restituisca un risultato prima di interrompere con un errore. Accetta un valore intero o con virgola mobile. Non può essere impostato su un valore superiore al valore predefinito (60 secondi), ma può essere modificato verso il basso per garantire che una determinata operazione non vada a buon fine rapidamente (ad esempio per restituire una risposta più rapida all'utente, riprovare a eseguire l'operazione, provare un'operazione diversa o aggiungerla a una coda di attività).
Se
keys
è composto da una singola chiave (o dalla relativa stringa) ), questo metodo restituisce l'istanza del modello associata se la chiave esiste nel Datastore, altrimentiNone
. Sekeys
è un elenco, il valore restituito è un elenco corrispondente di di istanze di modello, con valoriNone
in cui non esiste alcuna entità per una data chiave.Vedi anche
db.get()
personalizzata. - Model.get_by_id (ID, parent=None)
-
Recupera l'istanza (o le istanze) del modello per l'ID numerico specificato (o ID).
Argomenti
- id
- Un ID entità numerico o un elenco di ID numerici.
- padre
- L'entità padre per le entità richieste, come modello o chiave, oppure
None
(valore predefinito) se le entità richieste non hanno un principale. Più entità richieste da una chiamata devono avere tutte lo stesso principale. - read_policy
- Leggi il criterio che specifica il livello desiderato di coerenza dei dati:
- STRONG_CONSISTENCY
- Garantisce i risultati più recenti, ma limitati a una singola gruppo di entità.
- EVENTUAL_CONSISTENCY
- Può abbracciare più gruppi di entità, ma occasionalmente può ritornare i risultati obsoleti. In generale, le query a coerenza finale vengono eseguite è più veloce rispetto a query a elevata coerenza, ma non c'è alcuna garanzia.
Nota: le query globali (non predecessori) ignorano questo argomento.
- scadenza
- Tempo massimo, in secondi, di attesa che Datastore restituisca un risultato prima di interrompere con un errore. Accetta un valore intero o con virgola mobile. Non può essere impostato su un valore superiore al valore predefinito (60 secondi), ma può essere modificato verso il basso per garantire che una determinata operazione non vada a buon fine rapidamente (ad esempio per restituire una risposta più rapida all'utente, riprovare a eseguire l'operazione, provare un'operazione diversa o aggiungerla a una coda di attività).
Se
ids
è costituito da un singolo ID numerico, questo metodo restituisce l'istanza del modello associata all'ID, se quest'ultimo esiste in Datastore. altrimentiNone
. Seids
è un elenco, il valore restituito è un elenco corrispondente di istanze di modello, con valoriNone
in cui non esiste alcuna entità per un determinato ID numerico. - Model.get_by_key_name (key_names, parent=None)
-
Recupera l'istanza (o le istanze) del modello per il nome di chiave specificato (o nomi).
Argomenti
- key_names
- Un nome di chiave o un elenco di nomi di chiavi.
- padre
- L'entità padre per le entità richieste, come istanza del modello o
o
None
(valore predefinito) se le entità richieste non avere un genitore. Più entità richieste da una chiamata devono avere tutte lo stesso genitore. - read_policy
- Leggi il criterio che specifica il livello desiderato di coerenza dei dati:
- STRONG_CONSISTENCY
- Garantisce i risultati più recenti, ma limitati a una singola gruppo di entità.
- EVENTUAL_CONSISTENCY
- Può abbracciare più gruppi di entità, ma occasionalmente può ritornare i risultati obsoleti. In generale, le query a coerenza finale vengono eseguite è più veloce rispetto a query a elevata coerenza, ma non c'è alcuna garanzia.
Nota: le query globali (non predecessori) ignorano questo argomento.
- scadenza
- Tempo massimo, in secondi, di attesa che Datastore restituisca un risultato prima di interrompere con un errore. Accetta un valore intero o con virgola mobile. Non può essere impostato su un valore superiore al valore predefinito (60 secondi), ma può essere modificato verso il basso per garantire che una determinata operazione non vada a buon fine rapidamente (ad esempio per restituire una risposta più rapida all'utente, riprovare a eseguire l'operazione, provare un'operazione diversa o aggiungerla a una coda di attività).
Se
key_names
è costituito da un unico nome di chiave, questo metodo restituisce l'istanza del modello associata al nome se il nome esiste in Datastore, altrimentiNone
. Sekey_names
è un , il valore restituito corrisponde a un elenco corrispondente di istanze del modello, ValoriNone
in cui non esiste alcuna entità per un determinato nome di chiave. - Model.get_or_insert (key_name, **kwds)
-
Tenta di ottenere l'entità del tipo di modello con il nome della chiave specificato. Se esiste,
get_or_insert()
lo restituisce semplicemente. In caso contrario esiste, una nuova entità con il tipo, il nome e i parametri specificatikwds
viene creato, archiviato e restituito.Le operazioni get e put successive (possibili) sono aggregate in un per garantire l'atomicità. Ciò significa che
get_or_insert()
non sovrascriverà mai un'entità esistente e inserirà una nuova entità se e solo se non esiste nessuna entità con il tipo e il nome specificati. In altre parole,get_or_insert()
è equivalente al seguente codice Python:def txn(key_name, **kwds): entity = Story.get_by_key_name(key_name, parent=kwds.get('parent')) if entity is None: entity = Story(key_name=key_name, **kwds) entity.put() return entity def get_or_insert(key_name, **kwargs): return db.run_in_transaction(txn, key_name, **kwargs) get_or_insert('some key', title="The Three Little Pigs")
Argomenti
- key_name
- Il nome della chiave dell'entità
- kwds
- Argomenti parola chiave da passare al costruttore della classe del modello se
con il nome della chiave specificato, non esiste. La
L'argomento
parent
è necessario se l'entità desiderata ha un principale.
Nota:
get_or_insert()
non accetta un argomentoread_policy
odeadline
.Il metodo restituisce un'istanza della classe del modello che rappresenta richiesta dell'entità, se esisteva o è stata creata con il metodo. Come con tutte le operazioni Datastore, questo metodo può generare
TransactionFailedError
se non è stato possibile completare la transazione. - Model.all (keys_only=False)
-
Restituisce un
Query
che rappresenta tutte le entità del tipo corrispondente un modello di machine learning. I metodi sull'oggetto query possono applicare filtri e ordinare gli elementi la query prima che venga eseguita; vedi la pagina del corsoQuery
per ulteriori informazioni.Argomenti
- keys_only
- Indica se la query deve restituire entità complete o solo chiavi. Query che le chiavi restituite vengono più veloce e meno tempo di CPU rispetto alle query che restituiscono entità complete.
- Model.gql (query_string, *args, **kwds)
-
Esegue una query GQL sulle istanze di questo modello.
Argomenti
- query_string
- La parte della query GQL che segue
SELECT
*
FROM
model
(che è implicito utilizzando questo metodo della classe). - argomenti
- Associazioni di parametri posizionali, simili alle
GqlQuery()
. - kwds
- Associazioni di parametri delle parole chiave, simili alle
GqlQuery()
.
s = Story.gql("WHERE title = :1", "Little Red Riding Hood") s = Story.gql("WHERE title = :title", title="Little Red Riding Hood")
Il valore restituito è
GqlQuery
utilizzabile per accedere ai risultati. - Model.kind ()
- Restituisci il tipo di modello, di solito il nome sottoclasse del modello.
- Model.properties ()
- Restituisci un dizionario di tutte le proprietà definite per questo modello .
Metodi di istanza
Le istanze del modello hanno i seguenti metodi:
- chiave ()
-
Restituisce il datastore
Key
per questa istanza del modello.La chiave di un'istanza di modello include tipo di entità insieme a un identificatore univoco. L'identificatore può essere un La stringa nome chiave, assegnata esplicitamente dall'applicazione quando viene creata l'istanza oppure un ID numerico intero assegnato automaticamente da App Engine quando l'istanza viene scritta (put) a Datastore. Chiamata a
key()
prima che l'istanza sia stata a un identificatore generaNotSavedError
un'eccezione. - metti ()
-
Archivia l'istanza del modello in Datastore. Se l'istanza del modello è appena creato e non è mai stato archiviato, questo metodo crea un nuovo nel datastore. Altrimenti, aggiorna l'entità dati con valori della proprietà corrente.
Il metodo restituisce la chiave dell'entità memorizzata.
Se non è possibile eseguire il commit dei dati, genera una
TransactionFailedError
un'eccezione.Argomenti
- scadenza
- Tempo massimo, in secondi, di attesa che Datastore restituisca un risultato prima di interrompere con un errore. Accetta un valore intero o con virgola mobile. Non può essere impostato su un valore superiore al valore predefinito (60 secondi), ma può essere modificato verso il basso per garantire che una determinata operazione non vada a buon fine rapidamente (ad esempio per restituire una risposta più rapida all'utente, riprovare a eseguire l'operazione, provare un'operazione diversa o aggiungerla a una coda di attività).
- elimina ()
-
Elimina l'istanza del modello dal datastore. Se l'istanza non ha mai scritto (put) a Datastore, l'eliminazione genera
NotSavedError
un'eccezione.Argomenti
- scadenza
- Tempo massimo, in secondi, di attesa che Datastore restituisca un risultato prima di interrompere con un errore. Accetta un valore intero o con virgola mobile. Non può essere impostato su un valore superiore al valore predefinito (60 secondi), ma può essere modificato verso il basso per garantire che una determinata operazione non vada a buon fine rapidamente (ad esempio per restituire una risposta più rapida all'utente, riprovare a eseguire l'operazione, provare un'operazione diversa o aggiungerla a una coda di attività).
- is_saved ()
-
Restituisce
True
se l'istanza del modello è stata scritta (put) a Datastore almeno una volta.Questo metodo verifica solo che l'istanza sia stata scritta nel Datastore almeno una volta dalla sua creazione. Non controlla se le proprietà dell'istanza sono state aggiornate dall'ultima volta è stato scritto.
- dynamic_properties ()
-
Restituisce un elenco di nomi di tutte le proprietà dinamiche definite per questa istanza del modello. Questo vale solo per le istanze
Expando
. Per le istanze del modello non Espandito, viene restituito un elenco vuoto. - padre ()
-
Restituisce un'istanza di modello per l'entità padre di questa istanza oppure
None
se questa istanza non ha un padre. - parent_key ()
-
Restituisce il valore-chiave
Key
dell'entità padre di questa istanza oNone
se questa istanza non ha un genitore. - to_xml ()
-
Restituisce una rappresentazione XML dell'istanza del modello.
I valori delle proprietà sono conformi Atom e Dati specifiche.
Nomi proprietà non consentiti
Datastore e la relativa API impongono diverse restrizioni sui nomi delle entità di Compute Engine e gli attributi di istanza del modello.
Datastore prenota tutti i nomi delle proprietà che iniziano e terminano con due
trattini bassi (__*__
). Un'entità Datastore non può avere una proprietà con
un nome simile.
L'API del modello Python ignora tutti gli attributi su un elemento Model
o
Expando
che iniziano con un trattino basso (_
). La tua applicazione può utilizzare
questi attributi per associare i dati agli oggetti del modello che non vengono salvati
per il datastore.
Infine, l'API del modello Python utilizza gli attributi degli oggetti per definire le proprietà di un
e, per impostazione predefinita, le proprietà entità Datastore hanno il nome
attributi. Poiché la classe Model
ha diverse proprietà e
per altri scopi, questi attributi non possono essere utilizzati per le proprietà in
l'API Python. Ad esempio, un modello non può avere una proprietà a cui si accede con
attributo key
.
Tuttavia, una proprietà può specificare per il Datastore un nome diverso da quello della
nome dell'attributo assegnando un argomento name
alla proprietà
come costruttore. Ciò consente all'entità Datastore di avere un nome di proprietà simile a
un attributo riservato nella classe Model
e utilizza un altro
il nome dell'attributo nella classe.
class MyModel(db.Model): obj_key = db.StringProperty(name="key")
I seguenti nomi di attributi sono riservati alla classe Model
in
l'API Python:
|
|