日期:2014-05-16  浏览次数:20545 次

如何使用ZODB

如何使用ZODB

首先要下载安装python-zodb包,地址:http://packages.ubuntu.com/zh-cn/lucid/python-zodb

?

建立和断开与 ZODB 的连接

from ZODB import FileStorage, DB
import transaction

class MyZODB(object):

    def __init__(self, path):
        self.storage = FileStorage.FileStorage(path)
        self.db = DB(self.storage)
        self.connection = self.db.open()
        self.dbroot = self.connection.root()

    def close(self):
        self.connection.close()
        self.db.close()
        self.storage.close()

?

存储简单 Python 数据

from myzodb import MyZODB, transaction
db = MyZODB('./var/Data.fs')
dbroot = db.dbroot
dbroot['a_number'] = 3
dbroot['a_string'] = 'Gift'
dbroot['a_list'] = [1, 2, 3, 5, 7, 12]
dbroot['a_dictionary'] = { 1918: 'Red Sox', 1919: 'Reds' }
dbroot['deeply_nested'] = {
  1918: [ ('Red Sox', 4), ('Cubs', 2) ],
  1919: [ ('Reds', 5), ('White Sox', 3) ],
  }
transaction.commit()
db.close()

?

获取简单数据

from myzodb import MyZODB, transaction
db = MyZODB('./var/Data.fs')
dbroot = db.dbroot
for key in dbroot.keys():
  print key + ':', dbroot[key]
db.close()

?

使用 ZEO 提供远程访问

?

由于一次只有一个程序能够安全地打开“Data.fs”文件,ZEO 服务器是支持来自多个客户端的连接的唯一方法。

?

可通过与不同的zeo服务器通信来连接zodb,启动plone4时,启动了三个进程,其中一个就为zeoserver

from ZEO.ClientStorage import ClientStorage
from ZODB import DB

class MyRemoteZODB(object):
    def __init__(self, server, port):
        server_and_port = (server, port)
        self.storage = ClientStorage(server_and_port)
        self.db = DB(self.storage)
        self.connection = self.db.open()
        self.dbroot = self.connection.root()

    def close(self):
        self.connection.close()
        self.db.close()
        self.storage.close()

mydb = MyRemoteZODB('localhost', 8100) //端口号可从zeo配置文件中读出
dbroot = mydb.dbroot

for key in dbroot.keys():
  print key + ':', dbroot[key]
mydb.close()

?

?

详细参考: http://www.ibm.com/developerworks/cn/aix/library/au-zodb/

?