ZODB 讨论中

::-- hoxide [DateTime(2005-02-20T06:24:40Z)] TableOfContents

ZODB

简述

起因

学习笔记

ZODB的安装

基本概念

例子

!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()

逐步分解

from ZODB import FileStorage, DB
storage = FileStorage.FileStorage('/tmp/test-filestorage.fs')
db = DB(storage)
conn = db.open()

!python
import ZODB
from Persistence import Persistent

class User(Persistent):
    pass

!python
dbroot = conn.root()
# Ensure that a 'userdb' key is present
# in the root
if not dbroot.has_key('userdb'):
   from BTrees.OOBTree import OOBTree
   dbroot[’userdb’] = OOBTree()
userdb = dbroot[’userdb’]

dbroot和userdb都是OOBTree的实例