[ZODB-Dev] Re: trigger loading a Persistent's attributes
Miles
miles at jamkit.com
Tue Jan 30 04:44:03 EST 2007
Simon Burton wrote:
> On Sun, 28 Jan 2007 19:00:33 +0100
> "Dieter Maurer" <dieter at handshake.de> wrote:
>
>> Simon Burton wrote at 2007-1-27 15:18 -0800:
>>> I have a Persistent object, however, its attributes only
>>> get loaded from the storage when I request a specific attribute.
>>> Problem is, I don't know the names of the attributes
>>> necessarily. I was trying to just query the __dict__ but
>>> this does not trigger a load. Is there another way to do this ?
>> Accessing (almost) any attribute (even a non existing one) will load
>> the object. There are a few exceptions: attributes starting with "_p_"
>> or "_v_".
>>
>
> Yes. I looked at the dir function, it seems that when it accesses the "__members__"
> attribute this triggers a load.
>
> This is ZODB-fu. So be it.
>
Broadly, if you just request an object (rather than a method or
attribute), then the ZODB returns a 'ghost' object. The ghost object is
transformed into the real object once a method or attribute are used.
If you have a persistent object that you think is a ghost, you can call
_p_activate() on it. That will load __dict__ and turn it into the full
object for you to use as you want.
At least, that's what I've found - if this is wrong then someone should
speak up!
Miles
More information about the ZODB-Dev
mailing list