[ZODB-Dev] Object uniqueness

Christian Theune ct at gocept.com
Fri Oct 3 09:07:41 EDT 2008


Hi,

On Fri, 2008-10-03 at 15:57 +0300, Markus Läll wrote:
> I think I know now -- objects compare identical and equal only if they are
> in the same container object. (Check the code below)
> 
> I don't mean to be negative, but why can't ZODB be like a big RAM? Like
> when i store an object to multiple places on the same DB, then it would
> actually be the same in each place. (Like if you comment out the "Commit,
> close and reload" part of the below code, all the comparisons evaluate to
> True)

It does, you just need to do a little more work. See below.

> # -*- coding: cp1252 -*-
> # ZODB
> from ZODB import FileStorage, DB
> import transaction
> 
> # Trees
> from BTrees.IOBTree import IOBTree as IO
> from BTrees.OOBTree import OOBTree as OO, OOSet as OSet
> 
> # Open db
> storage = FileStorage.FileStorage('test.fs')
> db = DB(storage)
> conn = db.open()
> root = conn.root()
> 
> # The  one and only class
> class X(object):
----------^
Here's the Deal: ZODB is pretty much transparent. However, to work its
full magic, your objects have to subclass `persistent.Persistent`.
Otherwise ZODB will only pickle them in one large database record and
thus not know about their identity anymore. Also, object changes won't
trigger persistency updates automatically.

Your example will work as soon as you change this to:

class X(persistent.Persistent):

Cheers,
Christian

-- 
Christian Theune · ct at gocept.com
gocept gmbh & co. kg · forsterstraße 29 · 06112 halle (saale) · germany
http://gocept.com · tel +49 345 1229889 7 · fax +49 345 1229889 1
Zope and Plone consulting and development
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part
Url : http://mail.zope.org/pipermail/zodb-dev/attachments/20081003/d6a2f810/attachment.bin 


More information about the ZODB-Dev mailing list