繁体   English   中英

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

[英]How do I refresh an NDB entity from the datastore?

我希望能够在测试中断言我的代码称为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_entity实际上不会更改数据存储区中的任何内容。

使用Nose,datastore_v3_stub和memcache_stub。

您可以像这样绕过缓存:

entity = key.get(use_cache=False, use_memcache=False)

这些选项来自ndb的context选项 它们也可以应用于Model.get_by_id()Model.query().fetch()Model.query().get()

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM