Deutsche Zope User Group
Gast 3 Benutzer online
DZUG-News

Persistenz bei Objekten mit ver�nderbaren (mutable) Datentypen als Attribute

Frage:

Wieso werden �nderungen an einem Dictionary als Attribute einer Instanz nicht persistent gespeichert?

Antwort:

Bei der �nderung von Attributen einer Objektinstanz mu� darauf geachtet werden, ob das ge�nderte Attribute unver�nderbar (immutable:Strings, Tuple) ist oder ver�nderbar (mutable: Dicts, Listen). Die ZODB kann implementierungsbedingt nicht merken, wenn man in einer Transaktion z.B. ein Dict oder eine Liste �ndert. D.h. die �nderungen werden am Transaktionsende nicht in der ZODB gespeichert, d.h. solche �nderungen �berstehen einen Neustart nicht.

Der ZODB mu� signalisiert werden, dass sich die Attribute ge�ndert haben:

  class foobar:

     def __init__(self):
         self.d = {}

     def some_method(self, k, v):
         self.d[k] = v
         self._p_changed = 1

Das Setzen von _p_changed = 1 signalisiert der ZODB die Attribute in die ZODB zur�ckzuschreiben.

Referenzen:


Rubriken: Entwickler    FAQ angelegt von: ajung, Letzte �nderung: 11.11.2003 17:30 Uhr