改进ZODB持久化
项目描述
持久化
此包为持久化对象提供一个基类,其优点是只有当属性确实发生变化时,对象才被标记为已更改。
>>> import transaction >>> from ZODB.tests.util import DB>>> from lovely import persistent>>> p = LovelyPersistent() >>> p._p_changed False>>> p.a = 1 >>> db = DB() >>> conn = db.open() >>> conn.root()['p'] = p >>> transaction.commit()
提交更改后,对象不再处于已更改状态。
>>> p._p_changed False
将其设置为现有值不会使对象处于已更改状态。
>>> p.a 1 >>> p.a = 1 >>> p._p_changed False
但是修改一个
>>> p.a = 2 >>> p._p_changed True >>> transaction.commit()>>> p._p_changed False
删除一个属性也会使对象进入已更改状态。
>>> del p.a >>> p._p_changed True
特殊属性
特殊的属性实现也可以工作。为了展示这一点,我们使用了zope.schema中的fieldproperties。
>>> from zope.schema.fieldproperty import FieldProperty >>> from zope import schema, interface >>> class IMyFace(interface.Interface): ... eyesOpen = schema.Bool(default=True, required=False)>>> class MyFace(persistent.Persistent): ... eyesOpen = FieldProperty(IMyFace['eyesOpen'])>>> persistent.tests.MyFace = MyFace >>> MyFace.__module__ = persistent.tests.setUp.__module__ >>> myFace = conn.root()['myFace'] = MyFace() >>> transaction.commit()
默认值。
>>> myFace.eyesOpen True
验证。
>>> myFace.eyesOpen = 'not always' Traceback (most recent call last): ... WrongType: ('not always', <type 'bool'>)
注意,将值设置回默认值不会更改对象。
>>> transaction.commit() >>> myFace.eyesOpen = True >>> myFace._p_changed False>>> transaction.commit() >>> myFace.eyesOpen = False >>> myFace._p_changed True
可爱的持久化中的更改
2007/12/10 0.1.1
移动到zope.org
2007/06/19 0.1.0a1
添加zodb到依赖项
添加对fieldproperties的支持
下载
项目详情
下载文件
下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源分布
lovely.persistent-0.1.1.tar.gz (5.4 kB 查看哈希值)
构建发行版
lovely.persistent-0.1.1-py2.4.egg (9.5 kB 查看哈希值)