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

Neo4j Python驱动能否运行EXPLAIN?如何获取查询返回的非数据信息?

关于Neo4j Python驱动获取EXPLAIN输出及执行元信息的解答

1. EXPLAIN功能是否仅支持交互使用?

EXPLAIN不是仅支持交互使用的功能,完全可以通过Python驱动获取其输出。操作逻辑是直接提交带EXPLAIN前缀的Cypher查询,无需获取返回的记录数据,调取查询对应的ResultSummary对象即可拿到执行计划的全部内容。

2. 如何通过编程方式获取非数据类执行信息?

所有非数据类的执行提示、耗时、记录数等信息都封装在ResultSummary对象中,执行查询后调用.consume()方法即可获取该对象,参考示例代码如下:

from neo4j import GraphDatabase

# 初始化驱动
uri = "bolt://localhost:7687"
driver = GraphDatabase.driver(uri, auth=("neo4j", "你的数据库密码"))

def get_query_metadata(cypher, parameters=None):
    with driver.session() as session:
        result = session.run(cypher, parameters or {})
        # 所有非数据类信息全部封装在该summary对象中
        summary = result.consume()
        return summary

# 示例1:获取普通查询的执行提示信息
normal_summary = get_query_metadata("MATCH (n) RETURN n LIMIT 25")
# 你提到的执行提示类内容可以直接通过对应字段拼接得到
print(f"Started streaming {normal_summary.counters.nodes_returned} records after {normal_summary.result_available_after} ms and completed after {normal_summary.result_consumed_after} ms.")

# 示例2:获取EXPLAIN的执行计划内容
explain_summary = get_query_metadata("EXPLAIN MATCH (n) RETURN n LIMIT 25")
if explain_summary.plan:
    # 执行计划的根算子信息
    print("根算子类型:", explain_summary.plan.operation_type)
    print("算子参数:", explain_summary.plan.args)
    # 递归遍历plan.children属性即可拿到完整的执行计划树

3. ResultSummary的profile字段赋值逻辑

profile字段默认值为None,仅当你提交的Cypher查询带PROFILE前缀时,该字段才会被赋值,存储查询执行的剖面统计信息(包括每个算子的实际执行行数、耗时、缓存命中情况等);如果提交的是普通查询或者EXPLAIN前缀的查询,该字段都会保持None。

注意:EXPLAIN对应的执行计划信息存储在summary.plan属性中,不要和profile属性混淆。

版本适配说明

你使用的neo4j community 4.3.2、neo4j python driver 4.3.4完全支持上述所有功能,不存在版本兼容性问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 00:15:03