ZODB虽然是OODB, 但是任何有一些和关系数据库类似的概念 * ZODB的数据存储形式, 是多选的, 可以是普通文件(FileStorage), DB4和ZEO连接. * Python类通过继承Persistent可以变为ZODB化的. * ZODB是基于"事务"的. ==== 例子 ==== 先来看一个例子, 这个例子是可以运行的, 源于《ZODB/ZEO Programming Guide》 {{{ #!python from ZODB import FileStorage, DB import ZODB from Persistence import Persistent from BTrees.OOBTree import OOBTree class User(Persistent): pass def test1(): storage = FileStorage.FileStorage("test-filestorage.fs") db = DB(storage) conn = db.open() dbroot = conn.root() # Ensure that a 'userdb' key is present # in the root if not dbroot.has_key('userdb'): dbroot['userdb'] = OOBTree() userdb = dbroot['userdb'] # Create new User instance newuser = User() # Add whatever attributes you want to track newuser.id = 'amk' newuser.first_name = 'Andrew' newuser.last_name = 'Kuchling' # Add object to the BTree, keyed on the ID userdb[newuser.id] = newuser # Commit the change get_transaction().commit() conn.close() storage.close() def test2(): storage = FileStorage.FileStorage("test-filestorage.fs") db = DB(storage) conn = db.open() dbroot = conn.root() it = [dbroot] for t in it: for k, v in t.items(): if isinstance(v, OOBTree): print k, ':' it.append(v) elif isinstance(v, User): print 'Key:', k print 'ID:', v.id print 'first_name:', v.first_name print 'last_name:', v.last_name if __name__ == "__main__": test1() test2() }}} test1向数据库写数据, test2从数据库读数据.