Sto provando a caricare un'entità per chiave utilizzando l'id che è stato assegnato dal datastore ma non vedo alcun metodo API per farlo (usando NDB). Ho pensato che sarei in grado di creare una chiave da un ID intero e utilizzare key.get() per caricare l'entità, ma non vedo un modo per creare una chiave solo da un ID. Sospetto che mi manchi qualcosa di ovvio qui. Come dovrei caricare un'entità dove conosco solo l'id di esso?motore app ndb - come caricare entità per chiave usando id?
risposta
YourModel.get_by_id()
ottiene un'istanza di modello da id.
qui la documentazione:
https://developers.google.com/appengine/docs/python/ndb/modelclass#Model_get_by_id
non credo che non si può ottenere un'entità da id senza conoscere il genere perché le istanze di diverse classi del modello possono avere lo stesso id/key_name
altro modo: ndb.Key(YourModel, id).get()
.
I modelli in NDB non definiscono il tipo di chiave come parte del modello. Questo è elegante in quanto è possibile avere un determinato tipo di modello accessibile attraverso diversi tipi di chiavi e genitori, il che li rende più flessibili. Ma è un po 'problematico perché non è sempre chiaro cosa rappresenta la chiave o da dove proviene.
Quindi, nei casi in cui ci sia sempre e solo uno sorta di chiave per un determinato modello (che è quasi ogni modello), mi piace creare un metodo di classe per la generazione di quella chiave, che aggiunge un po 'di chiarezza semantica :
class Book(ndb.Model):
title = ndb.StringProperty()
pages = ndb.IntegerProperty()
@classmethod
def make_key(cls, isbn):
return ndb.Key(cls, isbn)
b = Book.make_key('1234-5678').get()
che il codice inserito non è strettamente necessario, ma aggiunge chiarezza e rende i miei modelli più mantenibile a lungo termine.
- 1. motore app ndb Key.get restituisce solo la chiave?
- 2. ID chiave personalizzata NDB di Google App Engine
- 3. NDB proiezione di istanza Chiave o ID
- 4. Google-app-engine NDB
- 5. Ottenere più entità con get_by_id in ndb
- 6. Come testare DateTimeProperty in App Engine NDB?
- 7. GAE NDB datastore nuova funzionalità: accesso datastore entità provenienti da altri GAE app
- 8. Il modo più economico per importare oltre 10 m di entità sul motore di app
- 9. JPA entità senza id
- 10. Datastore del Google App Engine: come ottenere entità per ID/Nome se la chiave genitore è sconosciuta?
- 11. Google Appengine NDB antenato vs query chiave
- 12. Come eliminare entità dal motore di Google Search Engine Datastore?
- 13. Google App Engine equivalente ndb per modelname_set (proprietà backreference)
- 14. App-motore e Scala
- 15. DiscriminatorColumn come parte della chiave primaria/id
- 16. Motore di modelli per Google App Engine
- 17. App Engine, Python: come filtrare la query per ID?
- 18. App Engine NDB: come accedere verbose_name di una proprietà
- 19. Prestazioni del caricatore di massa del motore di app
- 20. Come caricare wp_editor usando Jquery?
- 21. Come dare ID per TableRow usando insertRow()?
- 22. come salvare entità chiave esterna in JPA
- 23. Come aggiornare le entità correlate usando GraphDiff?
- 24. Come caricare un'immagine usando angular + symfony + vichuploaderBundle
- 25. arricciatura sul motore di app
- 26. Nuovo ID entità nell'evento di dominio
- 27. JPA Mappa w/Entità chiave e valore di entità
- 28. Un buon modo per generare GUID sul motore di app?
- 29. il modo più efficiente per ottenere, modificare e mettere un gruppo di entità con ndb
- 30. Come interrogare l'entità padre dall'entità figlio in NDB/Datastore di Google App Engine (Python)?
Grazie, è esattamente quello che stavo cercando. Non so come mi sia perso nei documenti. – user605331
Penso che i documenti siano sbagliati, non sono riuscito a far funzionare tutto questo per la vita di me, ma poi ho notato che stavo passando uno str, quindi convertire il long ID in un int ha fatto il trucco, anche se i documenti ti portano a credete di poter usare uno str questo non è vero almeno per quanto riguarda la versione 1.8.9 del motore app dell'app dev dev locale. Una volta che ho fatto un int (id_str) ha funzionato bene. – Shaun
@Shaun non penso che i documenti siano sbagliati. se il tuo id è un 'int' allora dovrai passare in un' int' e se è un 'str' allora deve essere un' str'. – aschmid00