如何从 py2neo 获取自动节点 ID?

How to get automatic node ID from py2neo?

我将 py2neo 3.1.2 版本与 Neo4j 3.2.0 一起使用,对此我有疑问。在 Neo4J 的 Web 界面上,我可以 运行 以下查询来获取节点 ID:

MATCH (n:Person) RETURN ID(n)

我想知道 py2neo API 是否有做同样事情的东西。我已经检查了 Node 对象,但找不到任何相关信息。

我在 Twitter(py2neo 的创建者)与 @technige 交谈过,他的回答是。

对啊。这有点间接,但你可以这样做:

from py2neo import remote remote(node)._id

更新:以前的答案不适用于新的 py2neo 但这个答案有效

当前版本 py2neo (4.0.0b12) 删除了 remote 方法。现在您可以通过访问 py2neo.data.Node.identity 属性来获取 NODE ID。这很简单。假设我使用 py2neo 查询我的 neo4j 数据库,如下所示:

#########################
# Standard Library Imports
#########################

import getpass

#########################
# Third party imports
#########################

import py2neo

# connect to the graph
graph = py2neo.Graph(password=getpass.getpass())

# enter your cypher query to return your node
a = graph.evaluate("MATCH (n:Person) RETURN n LIMIT 1")

# access the identity attribute of the b object to get NODE ID
node_id = a.identity

我们可以使用属性返回的节点 ID 查询我们的数据库来确认节点 ID。如果它工作正常,ab 应该是同一个节点。让我们做一个测试:

# run a query but use previous identity attribute
b = graph.evaluate("MATCH (n) WHERE ID(n)={} RETURN n".format(node_id))

# test for equality; if we are right, this evaluates to True
print(a == b)
[Out]: True