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

6
我正在使用标准的Python Gremlin绑定与JanusGraph一起使用,并且我想在顶点/边上设置一个float[]属性。然而,对于Python的Tinkerpop驱动程序似乎无法做到这一点。
例如,以下是使用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[]
问题是 - 是否有任何明智的方法来解决这个问题,而不是编写显式查询字符串?

此外,我知道我可以绑定数组的Python值,而不是直接格式化它。但这并没有使任何东西起作用。 - Barak Itkin
1个回答

1
这个问题已经讨论过几次了,而JanusGraph并不是唯一一个存在类型强制转换问题的图形数据库。从TinkerPop的角度来看,图应该尝试将TinkerPop类型强制转换为图模式中定义的适当类型,或者被图接受的其他类型,否则就需要提供额外的序列化或其他库支持,以允许这些类型暴露给用户。
据我所知,除了使用脚本之外,没有其他解决方法,正如你已经发现的那样。请注意,JanusGraph已经针对解决此问题开放问题

谢谢!至少我现在知道我没有错过任何东西。我会看一下,看看这是否是我可以解决的问题。 - Barak Itkin
这次是一个进退两难的情况,因为 https://issues.apache.org/jira/browse/TINKERPOP-2186。 - Wolfgang Fahl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接