跳转到主要内容

改进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 查看哈希值)

上传时间: 源代码

支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面