J'ai un modèle avec une propriété de référence, par exemple:Interrogation pour ne pas Aucun
class Data(db.Model):
x = db.IntegerProperty()
class Details(db.Model):
data = db.ReferenceProperty(reference_class = Data)
La référence de données peut être Aucun.
Je souhaite récupérer toutes les entités Details qui ont des données valides, c'est-à-dire pour lesquelles la propriété de référence n'est pas None.
Les travaux suivants:
Details.all().filter('data !=', None).fetch(1000)
Cependant, selon la documentation on queries, une requête !=
sera effectivement effectuer deux requêtes, ce qui semble inutile dans ce cas. !=
est-il optimisé pour n'effectuer qu'une seule requête lorsqu'il est utilisé avec None?
Alternativement, this post mentionne que NULL trie toujours avant les valeurs valides. Par conséquent, le suivant apparaît également au travail:
Details.all().filter('data >', None).fetch(1000)
Bien que cela ne ferait que faire une requête, en utilisant >
au lieu de !=
fait l'objet de ce qu'il fait moins évident.
En tant que troisième option, je pourrais ajouter un champ supplémentaire au modèle:
class Details(db.Model):
data = db.ReferenceProperty(reference_class = Data)
has_data = db.BooleanProperty()
Tant que je continue à has_data synchronisées avec les données, je pouvais faire:
Details.all().filter('has_data =', True).fetch(1000)
Quel chemin serait être le meilleur?
Merci.
triples guillemets, quadrupler citations :) –
Oops. Merci, Tim. Édité. – mahmoud
Re "Ceci est plus flexible, car il vous permet également d'interroger les détails qui n'ont pas de références de données" - il est réellement possible d'utiliser 'Details.all(). Filter ('data =', None) .fetch (1000) 'pour le faire. Cependant, je n'avais pas considéré l'angle de sauvegarde du filtre d'inégalité pour autre chose si j'en avais besoin dans le futur - bon point. Merci. –