1

benim kod değiştirilen varlıklar için Model.put() denilen testlerde iddia edebilmek istiyorum.Bir NDB varlığını veri deposundan nasıl yenilerim?

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 

Geçitler bu test: Maalesef, bazı önbelleğe alma devam böyle bu kodun bu gibi görünüyor

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 

zaman isterim gerçekten oldukça yaptım değil, gerçek dünyada beri, update_entity, gerçekte veri mağazasındaki hiçbir şeyi değiştirmeyecek. Burun, datastore_v3_stub ve memcache_stub kullanma

.

cevap

4

Böyle önbelleğe alma atlayabilir:

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

Bu seçenekler ndb en context options gelmektedir. Onlar Model.get_by_id(), Model.query().fetch() ve Model.query().get() da

0

Geçerli testi varlığın "Yerel", bellek içi sürümünü doğrular (veri deposuna içinde ne bağımsız). Eğer kontrol etmeden önce NDB gelen varlık yeniden getirmeye olmalıdır:

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

'a uygulanabilirler. Sorunun açıklığa kavuşturulması için düzenlenebilir - bu, hiçbirşeyi değiştirmez. – brandones

+0

Açıkçası bir ID belirlediğiniz ve stub'un bir şekilde önbelleğe nesneyi koyduğunuzdan kaynaklandığını düşünüyorum. Kimliği ayarlamazsanız, Anahtar Yok olmalıdır. – Nabla