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()
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top