У меня есть Ndb модели:NDB Фильтрация Структурированные собственности 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()
И в функции мне нужно найти продукт в магазине (код продукта и ключ магазина в запросе). Если в магазине нет продукта (возврат Нет), тогда мне нужно создать его. Если он существует, обновите цену от запроса. Теперь я делаю запрос 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()
И он отлично работает. Но! Несколько раз product_in_shop = None
, когда должны быть сущности (я был проверен в базе данных). Я попытался сделать еще один запрос для подсчета объектов, и он возвращает 0, но было более 1 объекта.
Когда я вижу эту сумку, я могу просто обновить (имя-проекта обновление имя-проекта appcfg.py -A питон), и это работает ...
Любые идеи, что я делаю неправильно или как это исправить?
Я предполагаю, что это связано с возможной последовательностью. https://cloud.google.com/datastore/docs/concepts/structuring_for_strong_consistency –