Python 如何从数据存储中刷新NDB实体?

Python 如何从数据存储中刷新NDB实体?,python,google-app-engine,google-cloud-datastore,app-engine-ndb,Python,Google App Engine,Google Cloud Datastore,App Engine Ndb,我希望能够在测试中断言,我的代码为被修改的实体调用了Model.put()。不幸的是,似乎正在进行一些缓存,因此以下代码: from google.appengine.ext import ndb class MyModel(ndb.Model): name = StringProperty(indexed=True) text = StringProperty() def update_entity(id, text): entity = MyModel.get_b

我希望能够在测试中断言,我的代码为被修改的实体调用了
Model.put()
。不幸的是,似乎正在进行一些缓存,因此以下代码:

from google.appengine.ext import ndb

class MyModel(ndb.Model):
    name = StringProperty(indexed=True)
    text = StringProperty()

def update_entity(id, text):
    entity = MyModel.get_by_id(id)
    entity.text = text
    # This is where entity.put() should happen but doesn't
通过此测试:

def test_updates_entity_in_datastore(unittest.TestCase):
    name = 'Beartato'
    entity = MyModel(id=12345L, name=name, text=None)
    text = 'foo bar baz'
    update_entity(entity.key.id(), text)
    new_entity = entity.key.get()  # Doesn't do anything, apparently
    # new_entity = entity.query(MyModel.name == name).fetch()[0]  # Same
    assert new_entity.text == text
当我真的希望它不这样做时,因为在现实世界中,
update\u entity
实际上不会改变数据存储中的任何内容


使用Nose、datastore_v3_存根和memcache_存根。

当前测试验证实体的“本地”内存版本(与数据存储中的内容无关)。在检查之前,您应该从NDB重新获取实体:

new_entity = entity.key.get()
assert [...]

您可以像这样绕过缓存:

entity=key.get(使用\u cache=False,使用\u memcache=False)


这些选项来自ndb。它们可以应用于
Model.get\u by\u id()
Model.query().fetch()
Model.query().get()
也可以编辑这个问题来澄清——尝试一下,它不会改变任何东西。我想这可能是因为您显式地设置了一个id,而存根以某种方式将实体放入缓存?如果未设置ID,则键应为None。