python - 如何从数据存储区刷新 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_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 options .它们可以应用于 Model.get_by_id()Model.query().fetch()Model.query().get() 也是

关于python - 如何从数据存储区刷新 NDB 实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36409955/

相关文章:

java - Google App Engine(Java) 数据库自动生成的 ID

python - 使用开发服务器的 Appengine BulkLoader 问题

java - Dataflow DoFn 中的数据存储查询在云中运行时会减慢管道速度

google-app-engine - NDB 与 DB(在高复制数据存储上)的速度比较是什么?

Python:获取每个公司的最新日期

python - 如何使用 python opencv 去除这些图片中的阴影?

python - Python 3.6 中无法通过 SQLAlchemy 连接到 mySQL

python - selenium.common.exceptions.SessionNotCreatedException : Message: session not created: This version of ChromeDriver only supports Chrome version 85

java - 在 Mac 中通过 Eclipse 在 Google 应用程序引擎中创建新的 Web 应用程序项目

google-app-engine - 寻找 Google App Engine 的非规范化建议