从旧版本升级

本页面包含驱动程序从 5.28 版本到 6.x 版本的新功能和重大更改列表。有关完整的更改列表,请参阅 驱动程序更新日志

6.x 系列的最新驱动程序版本兼容 Neo4j 4.4、5.x 和 202[56].x 服务器,因此您可以在升级服务器之前先升级驱动程序。同时,驱动程序 5.28 版本向前兼容 Neo4j 202[56].x 服务器,因此您也可以先升级服务器再升级驱动程序;但考虑到回滚应用程序升级比回滚服务器升级更容易,建议先从驱动程序开始。

将 Neo4j 服务器升级到较新版本时,应用程序中的 Cypher 查询可能也需要更新。驱动程序迁移助手(Drivers Migration Assistent)不涵盖 Cypher 的更改。
请参阅 Cypher → 弃用、新增与兼容性

新功能

新增 Vector 类型

Vector 类型允许在数据库中存储和检索 Cypher VECTOR 对象。VECTOR 类型适用于高效存储同构数字列表,例如嵌入(embeddings)。

错误中的 GQL 状态对象

异常对象现在还以 GQL 状态对象的形式公开错误。Neo4j 错误代码与 GQL 错误代码的主要区别在于后者更加细化。有关更多信息,请参阅 错误处理

重大更改与弃用

已弃用的功能可能会在下一个主要版本中移除。

版本 消息 状态

6.0

环境

  • 放弃了对 Python 3.7、3.8、3.9 的支持。

  • 包别名 neo4j-driver 从 6.0 版本开始停止更新。请改用 neo4j 进行安装。

  • setup.py 已被移除。请使用支持 pyproject.toml 的新版打包/构建工具。

已移除

6.0

Session —— .read_transaction().write_transaction() 方法已被移除,取而代之的是 .execute_read().execute_write()。通过这些新方法,事务函数的第一个参数是一个 ManagedTransaction 对象。它的行为类似于常规的 Transaction 对象,只是它不提供 .commit().rollback().close().closed() 方法。

已移除

6.0

驱动程序和会话对象不再通过 __del__()(析构函数)隐式关闭。这种行为是非确定性的,因为不能保证析构函数一定会被调用。现在会改为发出 ResourceWarning
请显式调用 driver.close() 或通过 with 语句创建驱动程序。

已移除

6.0

Driver —— 配置选项 trust 不再可用。现在可使用 trusted_certificatesssl_context 选项。

已移除

6.0

书签 (Bookmarks)

  • Session.last_bookmark() 方法已被移除,取而代之的是 Session.last_bookmarks()。逻辑类似,但新方法返回 Bookmarks 而不是 str

  • Bookmark 已被移除,取而代之的是 Bookmarks

  • Driver.session() 不再接受原始字符串作为书签参数。请改用 Bookmarks 对象。

已移除

6.0

导入 (Imports)

  • 以下模块的导入已被移除且没有替代方案,因为它们属于内部模块,不应被客户端代码使用:neo4j.packstreamneo4j.routingneo4j.configneo4j.metaneo4j.dataneo4j.meta.version 现在通过 neo4j.__version__ 公开。

  • 无法再从 neo4j.time 导入子模块。请直接从 neo4j.time 导入所有内容。

  • 无法再导入 neo4j.work 及其子模块。请直接从 neo4j 导入所有内容。

  • 以下对象已被移除且没有替代方案,因为它们属于内部对象,不应被客户端代码使用:neo4j.spatial.hydrate_pointneo4j.spatial.dehydrate_pointneoj4.Configneoj4.PoolConfigneoj4.SessionConfigneoj4.WorkspaceConfigneo4j.data.DataDehydratorneo4j.data.DataHydrator

  • 以下模块已被移除:neo4j.confneo4j.dataneo4j.metaneo4j.packstreamneo4j.routingneo4j.time.arithmeticneo4j.time.clock_implementationneo4j.time.hydrationneo4j.time.metaclassesneo4j.workneo4j.work.queryneo4j.work.summary

  • api.Version 已被移除,因为它现在未被使用。ServerInfo.protocol_version 现在是 tuple[int, int] 类型,而不是 api.Version。在大多数情况下,这应该是直接替换。

  • 将未记录的常量、辅助函数和其他内部项私有化。有关完整列表,请参阅 更新日志

已移除

6.0

SummaryNotificationPosition 类已被移除,取而代之的是 SummaryInputPosition

已移除

6.0

Neo4jError —— .is_retriable() 方法已被移除,取而代之的是 .is_retryable()

已移除

6.0

魔法方法 Record.__getslice__() 已被移除。如果您之前直接调用它,请改用 Record.__getitem__(slice(…​)) 或直接使用 record[…​]

已移除

6.0

更改了在某些情况下引发的错误。有关完整列表,请参阅 更新日志

已更改

6.0

图形类型集合 (neo4j.graph.EntitySetView) 不能再通过旧版 id (int,例如 graph.nodes[0]) 进行索引。请改用 element_id (str,例如 graph.nodes["…​"])。

已更改

5.0

NodeRelationship —— 属性 id (int) 已被弃用,取而代之的是 element_id (str)。这也影响 Graph 对象,因为用整数对 graph.nodes[…​]graph.relationships[…​] 进行索引已被弃用,取而代之的是使用字符串进行索引。

已弃用

6.0

作为 Neo4j 状态码的 通知 (Notifications) 已被弃用,取而代之的是 GQL 状态对象。

因此:

已弃用

6.0

模块 neo4j.time.ClockTime 及其访问器已被弃用。

已弃用

6.0

将原始字符串书签作为 initial_bookmarks 传递给 GraphDatabase.bookmark_manager() 已被弃用。请改用 Bookmarks 对象。

已弃用