【发布时间】:2012-10-04 01:08:50
【问题描述】:
看起来在使用 NDB 时临时变量也被缓存了。
class MyModel(ndb.Model)
def __init__(self, *args, **kwds):
self._temporary = []
ndb.Model.__init__(self, *args, **kwds)
有没有办法不在缓存中存储临时/辅助变量?
编辑:
这是一个证明我的问题的简单测试用例:
#Python imports
import unittest
# GAE imports
from google.appengine.ext import testbed
from google.appengine.datastore import datastore_stub_util
from google.appengine.ext import ndb
class TestModel(ndb.Model):
username = ndb.StringProperty()
def __init__(self, *args, **kwds):
self._temp = []
ndb.Model.__init__(self, *args, **kwds)
class TestModels(unittest.TestCase):
def setUp(self):
self.testbed = testbed.Testbed()
self.testbed.activate()
self.testbed.init_taskqueue_stub()
self.testbed.init_urlfetch_stub()
self.testbed.init_mail_stub()
self.testbed.init_images_stub()
self.testbed.init_blobstore_stub()
self.policy = datastore_stub_util.PseudoRandomHRConsistencyPolicy(probability=1)
self.testbed.init_datastore_v3_stub(consistency_policy=self.policy)
self.testbed.init_memcache_stub()
self.testbed.setup_env(app_id='ndb-test')
def tearDown(self):
self.testbed.deactivate()
def test1(self):
test_model = TestModel()
test_model.username = 'Tom'
test_model._temp = 'Temporary'
test_model.put()
test = TestModel.query().fetch(10)
self.assertEqual(1, len(test))
test = test[0]
self.assertEqual('Tom', test.username)
self.assertEqual([], test._temp)
测试的最后一行 self.assertEqual([], test._temp) 失败,即使我希望它通过。
有没有办法不存储临时/辅助模型属性,或者每次从缓存中加载模型时都有一种更简单的方法来重置它们?
【问题讨论】:
-
您是否 100% 确定它们已被缓存? Ndb 仅通过键(Key.get())缓存实体,它不应该缓存任何“帮助”变量(以下划线开头)。如果我运行您的代码,创建新实体,填充 _temporary 列表并将其放入,ndb 不会存储任何这些值。您能否描述一下您是如何对其进行测试的,以及您是如何获得缓存的结果的?
-
感谢您的回复。请查看我的编辑。
标签: google-app-engine app-engine-ndb