Python怎么解析 find path 返回的数据?

提问参考模版:

  • nebula 版本:3.6.0

  • 部署方式: 单机

  • 安装方式:源码编译

  • 是否上生产环境:Y

  • 问题的具体描述

  • 我在执行如下nGQL 语句获取最短路径时:

 FIND SHORTEST PATH WITH PROP FROM "dwd_label_3bc5e602b2d4c7fffe79258e2ac6952e" 
 TO "dwd_label_b54a7faadf3ab2373c646cc95a654377" OVER * BIDIRECT upto 2 steps YIELD path as p

返回的数据如下:


<("dwd_label_3bc5e602b2d4c7fffe79258e2ac6952e" :dwd_label{creation_time: 1715847504, display_desc: "邮箱", display_id: "dwd_label_3bc5e602b2d4c7fffe79258e2ac6952e", label: "邮箱"})<-[:edge_label@0 {creation_time: 1715847504, display_desc: "类别"}]-("dwd_number_13365XXXXXXXX" :dwd_number{city: "滨州", creation_time: 1715847504, display_desc: "中国山东滨州电信号码", display_id: "dwd_number_13365432122", nation: "中国", number: "13365XXXXX", operators: "电信", province: "山东"})-[:edge_label@0 {creation_time: 1715847504, display_desc: "类别"}]->("dwd_label_b54a7faadf3ab2373c646cc95a654377" :dwd_label{creation_time: 1715847504, display_desc: "物流类", display_id: "dwd_label_b54a7faadf3ab2373c646cc95a654377", label: "物流类"})>

我看使用了console 客户端执行语句返回值如下:

{
  "code": 0,
  "message": "",
  "data": {
    "headers": [
      "p"
    ],
    "tables": [
      {
        "_pathsParsedList": [
          {
            "relationships": [
              {
                "dstID": "dwd_label_3bc5e602b2d4c7fffe79258e2ac6952e",
                "edgeName": "edge_label",
                "rank": 0,
                "srcID": "dwd_number_133654XXXXX"
              },
              {
                "dstID": "dwd_label_b54a7faadf3ab2373c646cc95a654377",
                "edgeName": "edge_label",
                "rank": 0,
                "srcID": "dwd_number_133654XXXXX"
              }
            ],
            "type": "path"
          }
        ],
        "p": "\u003c(\"dwd_label_3bc5e602b2d4c7fffe79258e2ac6952e\" :dwd_label{creation_time: 1715847504, display_desc: \"邮箱\", display_id: \"dwd_label_3bc5e602b2d4c7fffe79258e2ac6952e\", label: \"邮箱\"})\u003c-[:edge_label@0 {creation_time: 1715847504, display_desc: \"类别\"}]-(\"dwd_number_133654XXXXX\" :dwd_number{city: \"滨州\", creation_time: 1715847504, display_desc: \"中国山东滨州电信号码\", display_id: \"dwd_number_133654XXXXX\", nation: \"中国\", number: \"133654XXXXX\", operators: \"电信\", province: \"山东\"})-[:edge_label@0 {creation_time: 1715847504, display_desc: \"类别\"}]-\u003e(\"dwd_label_b54a7faadf3ab2373c646cc95a654377\" :dwd_label{creation_time: 1715847504, display_desc: \"物流类\", display_id: \"dwd_label_b54a7faadf3ab2373c646cc95a654377\", label: \"物流类\"})\u003e"
      }
    ],
    "timeCost": 7389,
    "localParams": null
  }
}

使用nebula-python 3 版本查询结果如何渲染成客户端返会的数据呢?有具体的工具吗?或者对应样例代码?

1 个赞

同问,路径参数一般怎么解析成标准数据格式?

查询返回 ResultSet 类型的 res 之后遍历 res.row_values(i).get("p").as_path() 得到 PathWrapper 类型结果 的 path 变量,在解析 path.nodes()path.relationships() 就行。PathWrapper 里面还有很多其他东西可以简单看一下源码了解一下。

在这里顺便吐槽一下官方文档过于简洁以至于大多数东西都得自己翻源码研究 :joy:

这个我实现了,但是当我取出点或者边的属性的时候他会把我不想要的东西全部渲染出来

nebula自己的数据结构太怪异了,web 接口返回的时候他会自动把属性全部渲染出来

查询里带这个参数就会把所有属性都带着,去掉这个参数所有点就都不会带属性了,但不知道是不是你的需求

此话题已在最后回复的 30 天后被自动关闭。不再允许新回复。