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 来解决这个问题。
我正在使用带有标准 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 来解决这个问题。