|
Size: 387
Comment:
|
Size: 3366
Comment:
|
| Deletions are marked like this. | Additions are marked like this. |
| Line 3: | Line 3: |
| 含有章节索引的中文 文章模板 | ZODB 讨论中 |
| Line 6: | Line 6: |
| ::-- hoxide [[[DateTime(2005-02-20T05:44:32Z)]]] | ::-- hoxide [[[DateTime(2005-02-20T06:24:40Z)]]] |
| Line 8: | Line 8: |
| = 文章大标 = | = ZODB = |
| Line 10: | Line 10: |
| == 章标题1 == | == 起因 == 公元2005年2月19日会课中, limodou提到用ZODB来完成知识存储的想法. 他挖坑,偶就先跳进去了. |
| Line 12: | Line 13: |
| === 小节标题1 === | == 学习笔记 == 《ZODB/ZEO Programming Guide》一共才25页, 花了3小时看完, 先写点不算翻译也不算感想的东西吧. === ZODB的安装 === * windows版本从[http://zope.org/Products/ZODB3.2]下载. * BSD下直接在ports/databases/zodb3中安装 * ZODB主要包括了ZODB,ZEO,BTREE等几个重要都包, 他们可以独立于ZOPE运行的, 其实ZODB是ZOPE的地层, 整个ZOPE就架在ZODB上. === 基本概念 === ZODB虽然是OODB, 但是任何有一些和关系数据库类似的概念 * ZODB的数据存储形式, 是多选的, 可以是普通文件(FileStorage), DB4和ZEO连接 * Python类通过继承Persistent可以变为ZODB化的 * ZODB是基于"事务"的 * ZODB的逻辑结构是树状结构 === 例子 === 先来看一个例子, 这个例子是可以运行的, 源于《ZODB/ZEO Programming Guide》 |
| Line 14: | Line 31: |
| #!python Python code |
!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() |
| Line 18: | Line 85: |
| ==== 次节标题1 ==== xxx |
test1向数据库写数据, test2从数据库读数据. |
| Line 21: | Line 87: |
| == 章标题2 == === 小节标题2 === |
=== 逐步分解 === * 连接数据库, 这个例子中使用普通文本: |
| Line 25: | Line 90: |
| 其它 代码引用 |
from ZODB import FileStorage, DB storage = FileStorage.FileStorage('/tmp/test-filestorage.fs') db = DB(storage) conn = db.open() |
| Line 29: | Line 96: |
| ==== 次节标题2 ==== yyy |
* 建一个ZODB化的类User {{{ !python import ZODB from Persistence import Persistent class User(Persistent): pass }}} * 获取数据库的根, 若没有userdb添加一个userdb实例 {{{ !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的实例 |
ZODB 讨论中
::-- hoxide [DateTime(2005-02-20T06:24:40Z)] TableOfContents
ZODB
简述
起因
- 公元2005年2月19日会课中, limodou提到用ZODB来完成知识存储的想法. 他挖坑,偶就先跳进去了.
学习笔记
- 《ZODB/ZEO Programming Guide》一共才25页, 花了3小时看完, 先写点不算翻译也不算感想的东西吧.
ZODB的安装
windows版本从[http://zope.org/Products/ZODB3.2]下载.
- BSD下直接在ports/databases/zodb3中安装
- ZODB主要包括了ZODB,ZEO,BTREE等几个重要都包, 他们可以独立于ZOPE运行的, 其实ZODB是ZOPE的地层, 整个ZOPE就架在ZODB上.
基本概念
- ZODB虽然是OODB, 但是任何有一些和关系数据库类似的概念
ZODB的数据存储形式, 是多选的, 可以是普通文件(FileStorage), DB4和ZEO连接
- Python类通过继承Persistent可以变为ZODB化的
- 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从数据库读数据.
逐步分解
- 连接数据库, 这个例子中使用普通文本:
from ZODB import FileStorage, DB
storage = FileStorage.FileStorage('/tmp/test-filestorage.fs')
db = DB(storage)
conn = db.open()- 建一个ZODB化的类User
!python
import ZODB
from Persistence import Persistent
class User(Persistent):
pass- 获取数据库的根, 若没有userdb添加一个userdb实例
!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的实例
