【问题标题】:Tinkerpop & Python - Setting an array property via gremlinTinkerpop & Python - 通过 gremlin 设置数组属性
【发布时间】:2018-12-05 04:16:32
【问题描述】:

我将 JanusGraph 与标准 python gremlin 绑定一起使用,我想在顶点/边上设置 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

该错误可能是因为请求在 GraphSON 中由 python 驱动程序序列化 - 并且 GraphSON 支持具有不同类型元素的数组,因此场景后面的 Java 代码将值读取为 java.util.ArrayList 确实不能转换为 @ 987654327@.

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

【问题讨论】:

  • 另外,我知道我可以绑定数组的python值,而不是直接格式化它。但这并没有起到任何作用。

标签: python gremlin tinkerpop tinkerpop3 janusgraph


【解决方案1】:

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

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-10
  • 2020-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多