Mes aventures avec des groupes d'entités se poursuivent après un début légèrement embarrassant (voir Under some circumstances an App Engine get_by_key_name
call using an existing key_name returns None).Obtention d'une liste d'entités enfants dans App Engine à l'aide de get_by_key_name (Python)
Je vois maintenant que je ne peux pas faire un appel get_by_key_name
normal sur une liste d'entités pour des entités enfants qui ont plus d'une entité parente. Comme les docs modèles disent,
entités multiples demandé par un (
get_by_key_name
) appel doivent tous avoir le même parent.
J'ai pris l'habitude de faire quelque chose comme ce qui suit:
# Model just has the basic properties
entities = Model.get_by_key_name(key_names)
# ContentModel has all the text and blob properties for Model
content_entities = ContentModel.get_by_key_name(content_key_names)
for entity, content_entity in zip(entities, content_entities):
# do some stuff
Maintenant que les entités ContentModel sont des enfants des entités du modèle, cela ne fonctionnera pas à cause de l'exigence monoparental. Un moyen facile d'activer le scénario ci-dessus avec des groupes d'entités est de pouvoir passer une liste de parents à un appel get_by_key_name
, mais je suppose qu'il y a une bonne raison pour laquelle cela n'est pas possible actuellement. Je me demande si c'est une règle dure (comme il n'y a absolument aucun moyen qu'un tel appel puisse fonctionner) ou si le module db pourrait être modifié pour que ce type d'appel fonctionne, même si cela signifiait une plus grande CPU frais.
J'aimerais aussi vraiment voir comment les autres accomplissent ce genre de tâche. Je peux penser à un tas de façons de le gérer, comme l'utilisation des requêtes GQL, mais aucune ne peut penser à l'approche de la performance d'un appel get_by_key_name
.
Bonne idée. Je n'utilise pas assez de db.Key.from_path. – jamtoday
Vous pourriez être intéressé par cette [proposition de la pile-échange] (http://area51.stackexchange.com/proposals/11464/code-review?referrer=aWNm_PdciyFqjFW8CUacGw2 "revue de code"). Il est presque prêt à commencer la bêta, il en faut juste un peu plus. – greatwolf