如何執行ZODB SERVER


架設與設定方法

Server的設定
當你安裝好python和ZODB物件資料庫之後,想要使用ZODB物件資料庫必須先將ZODB SERVER啟動,執行runzeo.py來啟動ZEO SERVER,一般來說python的模組套件都會被安裝在python目錄下的\Lib\site-packages,而我們安裝的套件將會被放置在/ZODB與/ZEO中,runzeo.py這支SCRIPT是在/ZEO的檔案夾之下,首先我們可以先執行runzeo.py -h先求救,看看這個東西要怎麼使用。
使用方法如下:

Usage: %s [-C URL] [-a ADDRESS] [-f FILENAME] [-h]

Options:
-C/--configuration URL -- configuration file or URL
-a/--address ADDRESS -- server address of the form PORT, HOST:PORT, or PATH
(a PATH must contain at least one "/")
-f/--filename FILENAME -- filename for FileStorage
-t/--timeout TIMEOUT -- transaction timeout in secondes (default no timeout)
-h/--help -- print this usage message and exit
-m/--monitor ADDRESS -- address of monitor server ([HOST:]PORT or PATH)

Unless -C is specified, -a and -f are required.

你可以按照上述的說明給定一些參數之後將SERVER給跑起來,或者你可以寫一個設定檔將必要的設定設定在此檔案中。
設定檔所寫的資料內容包含:server address of the form PORT(參數-a),filename for FileStorage(參數-f)..等等。

設定檔的範例:(假設檔名:zeo.config)
<zeo>
address 140.129.25.117:8090
</zeo>

<filestorage 1>
path c:\\Data.fs
</filestorage>

<eventlog>
<logfile>
path c:\\zeo.log
format %(asctime)s %(message)s
</logfile>
</eventlog>


以上是一個簡單的設定檔範例,詳細說明請參閱ZEO 設定檔
address是定SERVER的相關資料,IP:140.129.25.117,PORT:8090
表示SERVER被建設140.129.25.117這台機器上,使用8090與外界溝通
而資料庫所存放的檔案在c:\\Data.fs
而log檔的格式被設定成'時間 訊息'

當你一切都就緒準備完畢,執行:
python runzeo.py -C zeo.config
zeo.config表示是設定檔的檔案名字

Configuring client使用端的設定與使用方法請參閱 ZEO Configuring client

程式設計指南
線上說明書

最後
準備要使用ZODB需要做到下面三個步驟:
1.你必須先打開一個儲存庫
2.在你的儲存庫上建立資料庫
3.連接你的資料庫

程式範例碼如下:
from ZODB import FileStorage, DB

storage = FileStorage.FileStorage('c:\\Data.fs')
db = DB(storage)
conn = db.open()

詳細資料請參考ZODB Programming

一個範例:
from Persistence import Persistent
from Transaction import get_transaction
from ZODB.FileStorage import DB

class Counter(Persistent):
     _value = 0
     def inc(self):
          self._value += 1

fs = DB(FileStorage.FileStorage('c:\\Data.fs'))
conn = db.open(); root = conn.root()
obj = root['myobj'] = Counter()
get_transaction().commit()
obj.inc()
get_transaction().commit()

解釋有關上面這個範例程式如何實作是一件有趣的事
root物件是一個Persistent的物件,它是一個字典(Python的一種資料型態),當'myjob'的key值被增加,root這個將會被標記成已經做改變。當transaction commits時,一筆新的資料將會被寫入root這個物件之中。
當資料被寫入,一個索引到新的persistent物件將會被標示出來。新的物件被指派給資料管理者,而且資料管理者指派一個子物件。然後一個新的資料為這個新的物件被寫入。
When the transaction commits, any other object referencing the root object will receive an invalidation notice.
At its next transaction boundary, it will update the object to its new state. It may also raise a ConflictError. 

創作者介紹

程式設計者天堂

CJY0503 發表在 痞客邦 PIXNET 留言(0) 人氣()