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

时间:2018-12-05 04:16:33

标签: python gremlin tinkerpop tinkerpop3 janusgraph

我将JanusGraph与标准python gremlin绑定一起使用,我想在顶点/边缘设置val = [1.2, 3.4, 5.6] _client.submit("g.V(4200).property('a', %s as float[])" % val).all().result() 属性。但是,Tinkerpop driver for Python似乎无法做到这一点。

例如,这是一个直接在Groovy中运行的脚本的示例:

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

以下是使用gremlin python库时失败的代码:

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

错误所在:

java.util.ArrayList

该错误可能是因为请求是由python驱动程序在GraphSON中序列化的-并且GraphSON支持具有不同类型元素的数组,因此,幕后的Java代码将其值读取为float[],而实际上无法进行强制转换到{{1}}。

问题是-除了编写明确的查询字符串之外,还有其他明智的方法吗?

1 个答案:

答案 0 :(得分:2)

这个问题已经讨论了好几次了,JanusGraph不是唯一具有类型强制问题的图形数据库。从TinkerPop的角度来看,图应该(1)尝试将TinkerPop类型强制为图模式中定义的适当类型,或者被图接受,或者(2)提供附加的序列化或其他库支持以允许将这些类型公开他们的用户。

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