Benutzerspezifische Werkzeuge
Sie sind hier: Startseite Support FAQs Entwicklung Wieso werden Änderungen an einem Dictionary als Attribute einer Instanz nicht persistent gespeichert?
Eine Ebene höher

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:


Letzte Änderung: 30.04.2006 • Autor: ajung