J'ai modèles NDB:NDB Filtrage pour App Google Propriété Structured Engine
class Product(ndb.Model):
name = ndb.StringProperty()
description = ndb.StringProperty()
code = ndb.StringProperty()
class Category(ndb.Model):
name = ndb.StringProperty()
class Shop(ndb.Model):
name = ndb.StringProperty()
category = ndb.StructuredProperty(Category)
address = ndb.StringProperty()
class ProductInShop(ndb.Model):
product = ndb.StructuredProperty(Product)
shop = ndb.StructuredProperty(Shop)
price = ndb.FloatProperty()
Et dans une fonction que je dois trouver le produit dans le magasin (code produit et la clé de la boutique en demande). Si aucun produit dans la boutique (renvoyant None) alors j'ai besoin de le créer. S'il existe, mettez à jour la valeur du prix à partir de la demande. Maintenant, je fais une requête par gql.
product_in_shop = ndb.gql(
'SELECT * FROM ProductInShop WHERE \
product.code = :1 AND shop = :2 LIMIT 1',
request.code,
ndb.Key(Shop, request.shop_key).get()
).get()
Et cela fonctionne très bien. Mais! Quelques fois product_in_shop = None
quand il devrait y avoir une entité (j'ai été vérifié à la base de données). J'ai été tenté de faire une autre requête pour compter les entités et elle renvoie 0, mais il y avait plus d'une entité.
Quand je vois ce sac je peux simplement mettre à jour (python appcfg.py projet Nom -A la mise à jour nom_projet) et il fonctionne ...
Toutes les idées que je fais mal ou comment réparer?
Je pense qu'il est lié à la cohérence éventuelle. https://cloud.google.com/datastore/docs/concepts/structuring_for_strong_consistency –