如何通过Neo4j Python Driver获取节点/关系的ID与标签?
解决方案:直接从Neo4j Python Driver的Record中提取节点/关系元数据
在Neo4j Python Driver 5.x版本中,data()、values()这类方法会自动将查询返回的节点/关系转换为仅包含属性的字典,导致丢失ID、标签、关系类型等元数据。但实际上,Record中存储的是Node和Relationship类型的原生实例,直接访问这些实例就能获取所有元数据,无需在Cypher中额外调用id()或labels()函数。
核心方法
- 从Record中直接通过查询语句里的键名(如
n、r)获取Node/RawRelationship实例 - Node实例的关键属性:
element_id:Neo4j 5+推荐使用的全局稳定ID(替代旧版id)labels:节点的标签列表(如["User", "Admin"])properties:节点的属性字典
- Relationship实例的关键属性:
element_id:关系的全局稳定IDtype:关系类型(如"FOLLOWS")properties:关系的属性字典start_node_element_id:关系起始节点的element_idend_node_element_id:关系结束节点的element_id
示例代码
from neo4j import GraphDatabase # 初始化Aura连接 driver = GraphDatabase.driver("neo4j+s://your-aura-instance-uri", auth=("username", "password")) with driver.session() as session: # 执行带节点和关系的查询 result = session.run("MATCH (user:User)-[rel:FOLLOWS]->(target:User) RETURN user, rel, target LIMIT 20") for record in result: # 提取起始节点信息 user_node = record["user"] print(f"用户节点ID: {user_node.element_id}, 标签: {user_node.labels}, 属性: {user_node.properties}") # 提取关系信息 follow_rel = record["rel"] print(f"关注关系ID: {follow_rel.element_id}, 类型: {follow_rel.type}, 属性: {follow_rel.properties}") print(f"起始节点ID: {follow_rel.start_node_element_id}, 目标节点ID: {follow_rel.end_node_element_id}") # 提取目标节点信息 target_node = record["target"] print(f"目标用户节点ID: {target_node.element_id}, 标签: {target_node.labels}, 属性: {target_node.properties}") driver.close()
关于graph()方法的补充
如果想用graph()批量获取所有节点和关系,可以直接访问返回Graph对象的nodes和relationships属性:
result = session.run("MATCH (n)-[r]->(m) RETURN n, r, m") graph = result.graph() # 遍历所有节点 for node in graph.nodes: print(f"节点ID: {node.element_id}, 标签: {node.labels}") # 遍历所有关系 for rel in graph.relationships: print(f"关系ID: {rel.element_id}, 类型: {rel.type}, 起始节点ID: {rel.start_node_element_id}")
内容的提问来源于stack exchange,提问作者breach
相关产品推荐
相关产品推荐

