You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python neo4j驱动使用RETURN *查询无法获取关系属性如何解决

核心原因

Python Neo4j驱动返回的关系、节点对象不会直接把属性挂载在实例顶层,所有属性默认存储在实例的properties字段中,并不是RETURN *没有返回关系属性,是取值方式不符合驱动的设计逻辑。


解决方案

方案1:不修改Cypher语句,调整Python侧取值逻辑

该方案可以完全保留原有的节点、关系元数据结构,不需要修改现有查询语句,直接从返回的关系/节点实例中读取properties属性即可获取全量自定义属性:

from neo4j import GraphDatabase

# 初始化驱动
driver = GraphDatabase.driver("neo4j://你的数据库地址", auth=("用户名", "密码"))

with driver.session() as session:
    # 原Cypher语句完全不用修改
    result = session.run('MATCH (this {name: "me"})-[r1]->(channel)<-[r2]-(target) RETURN *')
    for record in result:
        # 取r1的全量属性
        r1_all_props = record["r1"].properties
        # 取单个属性的写法也兼容
        r1_bananas = record["r1"].get("bananas")
        # 节点属性的读取逻辑和关系完全一致
        this_all_props = record["this"].properties

方案2:修改Cypher返回格式,直接返回纯字典结构

如果不需要节点、关系的元数据(比如关系类型、节点标签、实体ID等),只需要属性和原有嵌套结构,可以调整Cypher的RETURN子句使用属性投影语法:

MATCH (this {name: "me"})-[r1]->(channel)<-[r2]-(target) 
RETURN this{.*}, r1{.*}, channel{.*}, r2{.*}, target{.*}

其中{.*}表示返回对应实体的所有自定义属性,返回结果在Python中会直接解析为原生字典,不需要额外调用properties字段,和原有RETURN *的返回结构完全对应。


内容的提问来源于stack exchange,提问作者jstaab

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 00:45:04