Tinkerpop & Python - 通过 gremlin 设置数组 属性

Tinkerpop & Python - Setting an array property via gremlin

我正在使用带有标准 python gremlin 绑定的 JanusGraph,我想在 vertex/edge 上设置 float[] 属性。但是,Tinkerpop driver for Python 似乎无法做到这一点。

例如,这里有一个脚本运行直接在Groovy中的例子:

val = [1.2, 3.4, 5.6]
_client.submit("g.V(4200).property('a', %s as float[])" % val).all().result()

这里是使用 gremlin python 库时失败的代码:

val = [1.2, 3.4, 5.6]
g.V(4200).property('a', val).next()

错误所在:

GremlinServerError: 500: Property value [[1.2, 3.4, 5.6]] is of type class java.util.ArrayList is not supported

该错误可能是因为 python 驱动程序在 GraphSON 中对请求进行了序列化 - 并且 GraphSON 支持具有不同类型元素的数组,因此幕后的 Java 代码将值读取为java.util.ArrayList 确实不能转换为 float[].

问题是 - 除了编写显式查询字符串之外,还有什么明智的方法可以做到这一点吗?

这个问题已经讨论过几次,JanusGraph 并不是唯一一个存在类型强制问题的图形数据库。从 TinkerPop 的角度来看,图应该 (1) 尝试将 TinkerPop 类型强制转换为图模式中定义的适当类型或以其他方式被图接受,或者 (2) 提供额外的序列化或其他库支持以允许这些类型暴露给他们的用户。

据我所知,除了使用您已经发现的脚本之外,没有其他解决方法。请注意,JanusGraph 已经有一个 open issue 来解决这个问题。