Test GQL per IntegerProperty nullo
Domanda
Sto cercando di interrogare i record nel motore di Google App dove un IntegerProperty è nullo (Nessuno). Questo è quello che ho provato senza successo:
data = db.GqlQuery("SELECT * FROM MyModel WHERE intProp=:1",None)
E anche con una query:
query = db.Query(MyModel)
query = query.filter('intProp', None)
data = query.fetch(limit=100)
Qualsiasi aiuto sarebbe apprezzato.
class MyModel(db.Model):
intProp = db.IntegerProperty()
Soluzione
Il tuo codice sembra corretto. Lei in realtà hanno tutte le istanze di MyModel
con una intProp
di None
...?
Modifica : per il commento del PO è apparentemente una questione di migrazione dello schema; ha aggiunto una nuova proprietà e atteso entità esistente per farlo apparire (impostata su Nessuno). Non è così che le modifiche allo schema di lavoro GAE, per la documentazione :
Il datastore App Engine non lo fa richiedere tutte le entità ad avere lo stesso set di proprietà. Dopo aver aggiornato il modelli per aggiungere nuove proprietà, esistenti entità continueranno ad esistere senza queste proprietà. In qualche situazioni, questo va bene, e si non c'è bisogno di fare di più lavoro. quando vorresti tornare indietro e aggiornamento entità esistenti in modo da avere anche le nuove proprietà? una situazione sarebbe quando si vuole fare una query sulla base delle nuove proprietà. Nel nostro ad esempio con le immagini, le query come "I più popolari" o "Meno popolari" Non sarebbe tornato immagini esistenti, perché non lo fanno (ancora) avere il Valutazioni Caratteristiche. Per risolvere questo problema, faremo necessario aggiornare i entità esistenti nel datastore.
Il saggio cito continua mostrando un modo per farlo, ma è una bella approccio vecchio stile, da attività prima GAE aveva in programma, API remote, & c. Siamo in grado di farlo meglio ora. App Engine Fan ha una recentissima posta che mostra l'approccio generale (e un errore ha fatto durante la sua migrazione dello schema, in modo che altri possano evitarlo!), e punti per il API remoto come strumento chiave; egli sottolinea anche un modulo (dalla open source core-revisione del progetto Rietveld, avviato da Guido van Rossum, autore di Python e un fattore chiave per lo sviluppo di App Engine), che fa il compito in modo ordinato e corretto (è necessario modificare il codice di un po 'in modo che utilizza i vostri modelli & c invece di Rietveld di, ovviamente).
Altri suggerimenti
Sono riuscito a interrogare soggetti con un valore NULL utilizzando un trucco come questo:
SELECT * FROM WHERE MyModel intprop <0
Naturalmente non v'è alcuna garantie che un tale metodo nondocumented sarà compatibile con le versioni future.