跳转到主要内容

ZODB,一个Python面向对象数据库

项目描述

ZODB,一个Python面向对象数据库

Latest release Supported Python versions Build status Coverage status Documentation status

ZODB 为 Python 提供了一个面向对象的数据库,具有高度的透明性。ZODB 运行于 Python 3.7 及以上版本。它也支持 PyPy。

  • 没有单独的数据库操作语言

  • 对代码进行对象持久化的影响非常小

  • 没有部分隐藏数据库的数据库映射器

    使用对象关系映射 并不等同于 使用面向对象数据库

  • 代码和数据库之间几乎没有缝隙

ZODB 是一个 ACID 事务数据库

了解更多信息,请访问: https://zodb-docs.readthedocs.io

GitHub 仓库位于 https://github.com/zopefoundation/zodb

如果您想为 ZODB 本身做出贡献,请参阅 开发者指南

变更历史

6.0 (2024-03-20)

  • 添加对 Python 3.12 的支持。

  • 移除对 Python 2.7、3.5、3.6 的支持。

  • 修复 scripts/space.py 中的排序问题。

  • FileStorage:修复在多次撤销后使用恢复功能时的罕见数据损坏。详细信息请见 #395

  • 修复 repozo 脚本在验证错误情况下的退出代码。详细信息请见 #396

5.8.1 (2023-07-18)

  • 修复 racetest 问题。详细信息请见 #376

  • 修复脚本 repozo 中的 --with-verify 参数。详细信息请见 #381

5.8.0 (2022-11-09)

  • 添加对 Python 3.11 的支持。

  • 扩展和重构竞争条件测试。

5.7.0 (2022-03-17)

  • 修复在 Python 3 中运行 fsoids.py 脚本时出现的 TypeError: can't concat str to bytes 错误。请参阅 问题 350

  • 将事务大小信息重新添加到 fsdump 输出中;将 fsstats 适配到 fsdump 交换的顺序,以便在数据记录中的 sizeclass 信息中;(修复 #354 <https://github.com/zopefoundation/ZODB/issues/354>)。通过 Python 的 -m 命令行选项使 ``fsdump`` 可调用。

  • 修复运行 fsoids.py 脚本时出现的 UnboundLocalError。请参阅 问题 285

  • 重写 fsrefs 脚本,通过优化其 I/O 操作显著提高其速度。请参阅 PR 340

  • 构建文档需要 Python 3。

  • 修复在 Python 3.10 中出现的弃用警告。

  • 添加对 Python 3.9 和 3.10 的支持。

5.6.0 (2020-06-11)

  • 修复启动新事务时与失效相关的竞争条件。此错误影响了依赖于 mvccadapter 的存储实现,并可能导致数据损坏(并发提交后加载了错误的序列号)。请参阅 问题 290。如 pull request #307 中所述,接口已明确说明存储实现必须在特定时刻更新 lastTransaction() 返回的值:在 invalidate() 或 tpc_finish 回调之后。

  • 改进 volatile 属性 _v_ 的文档。

  • 通过在临时文件中恢复备份并将其移动到预期的输出文件,使 repozo 的恢复模式原子化。

  • 在 repozo 的恢复模式中添加了一个新选项,允许在运行时验证备份的完整性。

  • 移除对 Python 3.4 的支持。

  • 添加对 Python 3.8 的支持。

  • 修复在提交或回滚事务时,DB.undo()DB.undoMultiple() 未关闭其背后打开的存储的问题。请参阅 问题 268

  • 让TransactionMetaData 负责扩展数据的序列化和反序列化。新的 extension_bytes 属性可以自动从 extension 转换,反之亦然。在存储迭代期间,extension_bytes 保持它们存储时的字节(即不发生反序列化)。请参阅 问题 207

  • 使连接的 savepoint 存储实现其自己的(近似)getSize 方法,而不是依赖于原始存储。之前,这会产生令人困惑的 DEBUG 记录。请参阅 问题 282

  • 修复与事务 3.0 相关的测试。

  • 修复与 zope.interface v5 不一致的解析顺序。

  • 删除 ConnectionPool.map()。相反,现在 ConnectionPool 是可迭代的。请参阅 PR 280

5.5.1 (2018-10-25)

  • 修复在关闭数据库时释放连接资源时的 KeyError。这需要至少版本 2.4 的 transaction 包。请参阅 问题 208

5.5.0 (2018-10-13)

  • 添加对 Python 3.7 的支持。

  • 将 zodbpickle 依赖项提升至至少 1.0.1。这是为了避免在 Python 2.7 上的内存泄漏。请参阅 问题 203

  • 将 persistent 依赖项提升至至少 4.4.0。

  • 使处理 OIDs(p64u64)的内部支持函数稍微快一些,并在某些类型的错误输入上抛出更具信息量的异常。请参阅 问题 216

  • 删除对 python setup.py test 的支持。它已经有一段时间没有工作了。请参阅 问题 #218

  • 通过避免调用 time.sleep() 来使测试运行更快。

5.4.0 (2018-03-26)

  • ZODB 现在为 Python 2 和 Python 3 都使用 pickle 协议 3。

    (之前,Python 2 使用的是协议 2。)

    zodbpickle 包提供了一个 zodbpickle.binary 字符串类型,应该在 Python 2 中使用,以便将二进制字符串保存为 pickle 二进制格式,以便在 Python 3 中正确加载。pickle 协议 3 是使此功能正常工作的必要条件。

  • 在 Python 2 中,持久化引用中的对象标识符被保存为 zodbpickle.binary 字符串,以便在 Python 3 中正确加载。

  • 如果在打包 FileStorage 时对象索引中缺少对象,则报告其完整的 oid

  • 存储导入稍微快一些。

  • 存储可以从非可寻址源,如文件包装的管道中获取。

5.3.0 (2017-08-30)

  • 添加对 Python 3.6 的支持。

  • 删除对 Python 3.3 的支持。

  • 确保 HistoricalStorageAdapterrelease 方法转发到其基实例。请参阅 问题 78

  • 在 Python 2 中,使用更高的 pickle 协议(2)对对象进行序列化;之前使用的是协议 1。这对于新式类(所有持久化对象都是新式类)来说效率更高,但代价是旧式类的效率略有降低。

    请参阅 问题 179

5.2.4 (2017-05-17)

  • DB.close 现在明确释放内部资源。这对避免测试中的假阳性很有帮助,这些测试检查泄漏。

  • 优化获取blob文件路径的方法。请参阅问题161

  • 在Python 2中所有类都是新式类(在Python 3中它们已经是新式类)。这提高了PyPy的性能。请参阅问题160

5.2.3 (2017-04-11)

  • 修复了一个导入错误。请参阅问题158

5.2.2 (2017-04-11)

  • 修复:blob特性设置blob权限,使得blob和blob目录只能由数据库进程所有者读取,而不是尊重用户控制的权限(例如umask)。请参阅问题155

5.2.1 (2017-04-08)

  • 修复:以只读模式打开FileStorages时,会静默地创建不存在的文件。针对不存在文件的只读文件存储会引发错误。

5.2.0 (2017-02-09)

  • 在存储上调用新的afterCompletion API,以允许它们在事务完成后释放资源。请参阅问题147

  • 利用新的事务管理器显式模式来避免在事务结束时无必要地启动事务。

  • Connection.new_oid将其存储委托给存储,而不是数据库。这对提高像RelStorage这样的MVCC存储的并发性很有帮助。请参阅问题139

  • persistent不再需要在设置时使用。请参阅问题119

  • Connection.closeConnection.open不再在self.transaction_manager上竞争,这可能导致AttributeError。这是一个在5.0.1中引入的bug。请参阅问题142

5.1.1 (2016-11-18)

  • 修复:ZODB.Connection.TransactionMetaData不支持一些存储依赖的定制数据存储。

5.1.0 (2016-11-17)

  • ZODB现在在将事务元数据、userdescription传递给存储之前将它们从文本转换为字节,并在从存储检索它们时在historyundoLogundoInfo方法中将它们转换回文本。

    IDatabase接口更新,以反映historyundoLogundoInfo在数据库对象上可用。(它们始终可用,但在接口中没有记录。)

5.0.1 (2016-11-17)

  • 修复:如果DemoStorage被要求在读取blob之前将blob存储到临时更改中,它可能会引发AttributeError。请参阅问题103

  • 即使冲突更改没有改变状态,也调用_p_resolveConflict()。这恢复了3.10.3及更早版本的行怍。

  • 关闭连接现在将其transaction_manager重置为None。这有助于防止错误并在transaction_manager是(默认的)线程局部管理器时释放资源。请参阅问题114

  • 许多文档字符串已得到改进。

5.0.0 (2016-09-06)

主要内部改进和清理,以及

  • 添加了一个连接prefetch方法,可以用来请求存储预取应用程序需要的数据

    conn.prefetch(obj, ...)

    当参数可以是对象、对象ID或对象或对象ID的迭代器时。

    向存储API添加了可选的prefetch方法。如果存储不支持预取,则连接预取方法为空操作。

  • fstail:打印事务偏移量和头大小,而不是只有数据偏移量。fstail现在可以用于截断DB到正确的偏移量。

  • 停止支持旧提交协议。所有内置存储都已实现新协议。这种新协议允许存储通过并行执行多个提交来提供更好的写入性能。

5.0.0b1 (2016-08-04)

  • fstail:打印事务偏移量和头大小,而不是只有数据偏移量。fstail现在可以用于截断DB到正确的偏移量。

进行了多项内部清理,包括

  • 更改了创建根对象的方式。现在根对象是通过数据库连接创建的,而不是通过低级存储调用。

  • 停止支持旧提交协议。

  • 内部FileStorage-undo修复,这应该允许在之前无法工作的某些情况下撤销。

  • 删除了某些方法的最后一个参数version,当它是可选参数时。

5.0.0a6 (2016-07-21)

  • 添加了一个连接预取方法,可以用来请求存储预取应用程序所需的数据

    conn.prefetch(obj, ...)

    当参数可以是对象、对象ID或对象或对象ID的迭代器时。

    向存储API添加了可选的prefetch方法。如果存储不支持预取,则连接预取方法为空操作。

5.0.0a5 (2016-07-06)

停止支持旧提交协议。所有内置存储都已实现新协议。这种新协议允许存储通过并行执行多个提交来提供更好的写入性能。

5.0.0a4 (2016-07-05)

参见4.4.2。

5.0.0a3 (2016-07-01)

参见4.4.1。

5.0.0a2 (2016-07-01)

参见4.4.0。

5.0.0a1 (2016-06-20)

对多版本并发控制(MVCC)实现进行了重大的内部实现更改

  • 对于实现IMVCCStorage(RelStorage)的存储,不再在ZODB中实现MVCC。

  • 对于其他存储,MVCC是通过一个额外的存储层实现的。底层层通过调用loadBefore来工作。不再使用低级存储的load方法。

    此更改允许基于服务器的存储(如ZEO和NEO)以更简单、更干净的方式实现。

4.4.3 (2016-08-04)

  • 内部FileStorage-undo修复,这应该允许在之前无法工作的某些情况下撤销。

  • fstail:打印事务偏移量和头大小,而不是只有数据偏移量。fstail现在可以用于截断DB到正确的偏移量。

4.4.2 (2016-07-08)

更好地支持新提交协议。这解决了blob和撤销的问题。参见拉取请求#77,#80,#83

4.4.1 (2016-07-01)

添加了IMultiCommitStorage,以直接表示4.4.0版本中的更改,并使兼容存储可内省。

4.4.0 (2016-06-30)

此版本开始向更有效的提交协议进化,允许存储实现(如NEO)同时支持多个事务提交,以实现更高的写入并行性。

此版本更新了IStorage

  • tpc_finish现在返回提交事务的ID,而不是在存储和tpc_vote结果中返回。

  • tpc_vote现在期望返回None或已解决冲突的对象ID列表。

此版本与实现了旧版存储接口的存储一起工作,但也支持实现了更新接口的存储。

4.3.1 (2016-06-06)

  • 修复:FileStorage的loadBefore没有正确处理已删除/撤销的数据。

4.3.0 (2016-05-31)

4.2.0 (2015-06-02)

4.2.0b1(2015-05-22)

  • DEBUG级别记录失败的冲突解决尝试。请参阅:https://github.com/zopefoundation/ZODB/pull/29

  • 修复对--verbose--verify参数的命令行解析。短版本-v-V被正确解析。

  • 添加对PyPy的支持。

  • 修复在Python 2.7下(在脚本如referrersnetspacefsrecover等中使用)找到对象引用的方法。这需要添加zodbpickle依赖。

  • FileStorage:修复在打包时磁盘空间不足的边缘情况,不要留下.pack文件。这会阻止对即将打包的Data.fs的任何写入,因为磁盘将保持0个字节的空闲空间。请参阅https://github.com/zopefoundation/ZODB/pull/21

4.1.0 (2015-01-11)

  • 修复自定义日志级别名称(“BLATHER”,“TRACE”)的注册。

    自2004年以来,我们一直在错误地注册它们。在Python 3.4之前,stdlib的logging模块通过在两个方向注册它们来掩盖错误。

  • 添加对Python 3.4的支持。

4.0.1 (2014-07-13)

  • 修复在savepoint.rollback之后transaction.commit期间的POSKeyError。请参阅https://github.com/zopefoundation/ZODB/issues/16

  • 确保在PyPy中使用的pickler始终具有persistent_id属性(纯Python pickler中没有inst_persistent_id)。(PR #17)

  • 在尝试在关闭的连接上加载对象时提供更好的错误报告。

4.0.0 (2013-08-18)

最终发布。

4.0.0b3(2013-06-11)

  • 切换到在Python 3下使用不向后兼容的pickles(协议3,不将字节存储为字符串)。更新Python 3下文件存储文件的魔术数字,以表示不兼容性。

  • 修复:在bushy blob布局中使用时,对于非ASCII OIDs可能会发生UnicodeDecodeError

4.0.0b2(2013-05-14)

  • 扩展用于blob doctests的文件名规范化器,以支持ZEO在非共享模式下使用的文件名。

  • url参数添加到setup()中(PyPI表示这是必需的)。

4.0.0b1(2013-05-10)

  • setup.py test中跳过非单元测试。使用buildout运行需要“层”支持的测试。

  • 在异常消息中包含文件名,以支持在loadBlob找不到文件时的调试。

  • 添加对Python 3.2/3.3的支持。

4.0.0a4(2012-12-17)

  • 强制使用字节为持久对象的_p_serial(修复了与最近持久化版本的兼容性)。

4.0.0a3(2012-12-01)

  • 修复:一个针对琐碎逻辑的详细测试以某种方式破坏了模块状态,导致其他测试意外失败。

    (此处省略了30的内容,因为没有提供具体的文本。)

4.0.0a2 (2012-11-13)

已修复的错误

  • setup.py 中的一个不必要的遗留设置导致使用 pip 安装失败。

4.0.0a1 (2012-11-07)

新特性

  • 现在将 persistentBTrees 包作为独立的发行版发布,ZODB 现在依赖于这些发行版。

  • ZODB 不再依赖于 zope.event。它现在使用 ZODB.event,如果已安装 zope.event,则使用 zope.event。您可以覆盖 ZODB.event.notify 以提供您自己的事件处理,尽管建议使用 zope.event。

  • BTrees 允许使用疯狂的比较作为对象键。(比较从对象继承,基于进程内地址进行比较。)现在,如果尝试保存使用从对象继承的比较作为键,BTrees 将引发 TypeError。(这不适用于旧式类实例。)

已修复的错误

  • 确保由 repozo 创建的导出文件和索引文件具有相同的时戳。

    https://bugs.launchpad.net/zodb/+bug/993350

  • 当在 Python 2.5 下安装时,将 transactionmanuel 依赖项固定到与 Python 2.5 兼容的版本。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源发行版

ZODB-6.0.tar.gz (786.9 kB 查看哈希值)

上传于

构建分发

ZODB-6.0-py3-none-any.whl (417.8 kB 查看哈希值)

上传于 Python 3

由以下支持