Ich habe ndb Modelle:NDB Filtering für Strukturierte Immobilien Google App 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()
Und in einer Funktion finde ich Artikel im Shop (Produktcode und Shop-Taste in Anfrage) benötigen. Wenn kein Produkt im Shop ist (Rückgabe keine), muss ich es erstellen. Wenn es vorhanden ist, aktualisieren Sie den Preiswert aus der Anfrage. Jetzt mache ich Abfrage von 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()
Und es funktioniert gut. Aber! Einige Male product_in_shop = None
wenn es eine Entität geben sollte (ich wurde in der Datenbank überprüft). Ich wurde versucht, eine weitere Abfrage zu machen, um Entitäten zu zählen, und es gibt 0 zurück, aber es gab mehr als 1 Entität.
Wenn ich diese Tasche sehen kann ich nur aktualisieren (Python appcfg.py -Ein Projekt-Name Update Projektname) und es funktioniert ...
Alle Ideen, was ich tue, falsch, oder wie es beheben?
Ich denke, es ist mit Eventual Consistency verknüpft. https://cloud.google.com/datastore/docs/concepts/structuring_for_strong_consistency –