OrientDB Gremlin服务器无法在python中工作

OrientDB Gremlin服务器无法在python中工作,python,orientdb,gremlin,gremlin-server,gremlinpython,Python,Orientdb,Gremlin,Gremlin Server,Gremlinpython,我在python中使用orientdb和gremlin服务器,gremlin服务器已成功启动,但当我试图通过gremlin代码向orientdb添加一个顶点时,出现了一个错误 query = """graph.addVertex(label, "Test", "title", "abc", "title", "abc")""" 以下是回溯 /usr/bin/python3.6 /home/admin-12/Documents/bitbucket/ecodrone/ecodrone/test/t

我在python中使用orientdb和gremlin服务器,gremlin服务器已成功启动,但当我试图通过gremlin代码向orientdb添加一个顶点时,出现了一个错误

query = """graph.addVertex(label, "Test", "title", "abc", "title", "abc")"""
以下是回溯

/usr/bin/python3.6 /home/admin-12/Documents/bitbucket/ecodrone/ecodrone/test/test1.py
Traceback (most recent call last):
  File "/home/admin-12/Documents/bitbucket/ecodrone/ecodrone/test/test1.py", line 27, in <module>
    result = execute_query("""graph.addVertex(label, "Test", "title", "abc", "title", "abc")""")
  File "/home/admin-12/Documents/bitbucket/ecodrone/ecodrone/GremlinConnector.py", line 21, in execute_query
    results = future_results.result()
  File "/usr/lib/python3.6/concurrent/futures/_base.py", line 432, in result
    return self.__get_result()
  File "/usr/lib/python3.6/concurrent/futures/_base.py", line 384, in __get_result
    raise self._exception
  File "/home/admin-12/.local/lib/python3.6/site-packages/gremlin_python/driver/resultset.py", line 81, in cb
    f.result()
  File "/usr/lib/python3.6/concurrent/futures/_base.py", line 425, in result
    return self.__get_result()
  File "/usr/lib/python3.6/concurrent/futures/_base.py", line 384, in __get_result
    raise self._exception
  File "/usr/lib/python3.6/concurrent/futures/thread.py", line 56, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/home/admin-12/.local/lib/python3.6/site-packages/gremlin_python/driver/connection.py", line 77, in _receive
    self._protocol.data_received(data, self._results)
  File "/home/admin-12/.local/lib/python3.6/site-packages/gremlin_python/driver/protocol.py", line 106, in data_received
    "{0}: {1}".format(status_code, data["status"]["message"]))
gremlin_python.driver.protocol.GremlinServerError: 599: Error during serialization: Infinite recursion (StackOverflowError) (through reference chain: com.orientechnologies.orient.core.id.ORecordId["record"]->com.orientechnologies.orient.core.record.impl.ODocument["schemaClass"]->com.orientechnologies.orient.core.metadata.schema.OClassImpl["document"]->com.orientechnologies.orient.core.record.impl.ODocument["owners"]->com.orientechnologies.orient.core.record.impl.ODocument["owners"]->com.orientechnologies.orient.core.record.impl.ODocument["owners"]->com.orientechnologies.orient.core.record.impl.ODocument["owners"]->com.orientechnologies.orient.core.record.impl.ODocument["owners"]->com.orientechnologies.orient.core.record.impl.ODocument["owners"]->com.orientechnologies.orient.core.record.impl.ODocument["owners"]->com.orientechnologies.orient.core.record.impl.ODocument["owners"]->com.orientechnologies.orient.core.record.impl.ODocument["owners"]->com.orientechnologies.orient.core.record.impl.ODocument["owners"]->com.orientechnologies.orient.core.record.impl.ODocument["owners"]->com.orientechnologies.orient.core.record.impl.ODocument["owners"]->com.orientechnologies.orient.core.record.impl.ODocument["owners"]->com.orientechnologies.orient.core.record.impl.ODocument["owners"]->com.orientechnologies.orient.core.record.impl.ODocument["owners"]->com.orientechnologies.orient.core.record.impl.ODocument["owners"]->com.orientechnologies.orient.core.record.impl.ODocument["owners"]->com.orientechnologies.orient.core.record.impl.ODocument["owners"]->com.orientechnologies.orient.core.record.impl.ODocument["owners"]->com.orientechnologies.orient.core.record.impl.ODocument["owners"]->com.orientechnologies.orient.core.record.impl.ODocument["owners"]->com.orientechnologies.orient.core.record.impl.ODocument["owners"]->com.orientechnologies.orient.core.record.impl.ODocument["owners"]->com.orientechnologies.orient.core.record.impl.ODocument["owners"]->com.orientechnologies.orient.core.record.impl.ODocument["owners"]->com.orientechnologies.orient.core.record.impl.ODocument["owners"]->com.orientechnologies.orient.core.record.impl.ODocument["owners"]->com.orientechnologies.orient.core.record.impl.ODocument["owners"]->com.orientechnologies.orient.core.record.impl.ODocument["owners"]->com.orientechnologies.orient.core.record.impl.ODocument["owners"]->com.orientechnologies.orient.core.record.impl.ODocument["owners"]->com.orientechnologies.orient.core.record.impl.ODocument["owners"]->com.orientechnologies.orient.core.record.impl.ODocument["owners"]->com.orientechnologies.orient.core.record.impl.ODocument["owners"]->com.orientechnologies.orient.core.record.impl.ODocument["owners"]->com.orientechnologies.orient.core.record.impl.ODocument["owners"])

Process finished with exit code 1
/usr/bin/python3.6/home/admin-12/Documents/bitbucket/ecodrone/ecodrone/test/test1.py
回溯(最近一次呼叫最后一次):
文件“/home/admin-12/Documents/bitbucket/ecodrone/ecodrone/test/test1.py”,第27行,在
结果=执行查询(““”graph.addVertex(标签,“测试”、“标题”、“abc”、“标题”、“abc”)”)
文件“/home/admin-12/Documents/bitbucket/ecodrone/ecodrone/gremlinconconnector.py”,执行查询中的第21行
结果=未来的结果。结果()
文件“/usr/lib/python3.6/concurrent/futures/_base.py”,第432行,在结果中
返回self.\u获取\u结果()
文件“/usr/lib/python3.6/concurrent/futures/_base.py”,第384行,在“获取结果”中
提出自己的意见
cb中的文件“/home/admin-12/.local/lib/python3.6/site packages/gremlin_python/driver/resultset.py”,第81行
f、 结果()
文件“/usr/lib/python3.6/concurrent/futures/_base.py”,第425行,在结果中
返回self.\u获取\u结果()
文件“/usr/lib/python3.6/concurrent/futures/_base.py”,第384行,在“获取结果”中
提出自己的意见
文件“/usr/lib/python3.6/concurrent/futures/thread.py”,第56行,运行中
结果=self.fn(*self.args,**self.kwargs)
文件“/home/admin-12/.local/lib/python3.6/site packages/gremlin_python/driver/connection.py”,第77行,在_receive中
接收到的自检协议数据(数据、自检结果)
文件“/home/admin-12/.local/lib/python3.6/site-packages/gremlin\u-python/driver/protocol.py”,第106行,在收到的数据中
“{0}:{1}”。格式(状态代码,数据[“状态”][“消息”]))
gremlin_python.driver.protocol.GremlinServerError:599:序列化期间出错:无限递归(StackOverflowerError)(通过引用链:com.orientechnologies.orient.core.id.ORecordId[“record”]->com.orientechnologies.orient.core.record.impl.ODocument[“schemaClass”]->.com.orientechnologies.orient.core.metadata.schema.oclassimll[“文档”]->com.orientechnologies.orient.core.record.impl.ODocument[“所有者”]->com.orientechnologies.orient.core.record.impl.ODocument[“所有者”]->com.orientechnologies.orient.core.record.impl.ODocument[“所有者”]->com.orientechnologies.orient.core.record.impl.ODocument[“所有者”]->->com.orientechnologies.orient.core.record.impl.ODocument[“所有者”]->com.orientechnologies.orient.core.record.impl.ODocument[“所有者”]->com.orientechnologies.orient.core.record.impl.ODocument[“所有者”]->com.orientechnologies.orient.core.record.impl.ODocument[“所有者”]->com.orientechnologies.orient.core.record.impl.ODocument[“所有者”]->com.orientechnologies.orient.core.record.impl.ODocument[“所有者”]->com.orientechnologies.orient.core.record.impl.ODocument[“所有者”]->com.orientechnologies.orient.core.record.impl.ODocument[“所有者”]->com.orientechnologies.orient.core.record.impl.ODocument[“所有者”]->com.orientechnologies.orient.core.record.impl.ODocument[“所有者”]->com.orientechnologies.orient.core.record.impl.ODocument[“所有者”]->com.orientechnologies.orient.core.record.impl.ODocument[“所有者”]->com.orientechnologies.orient.core.record.impl.ODocument[“所有者”]->com.orientechnologies.orient.core.record.impl.ODocument[“所有者”]->com.orientechnologies.orient.core.record.impl.ODocument[“所有者”]->com.orientechnologies.orient.core.record.impl.ODocument[“所有者”]->com.orientechnologies.orient.core.record.impl.ODocument[“所有者”]->com.orientechnologies.orient.core.record.impl.ODocument[“所有者”]->com.orientechnologies.orient.core.record.impl.ODocument[“所有者”]->com.orientechnologies.orient.core.record.impl.ODocument[“所有者”]->com.orientechnologies.orient.core.record.impl.ODocument[“所有者”]->com.orientechnologies.orient.core.record.impl.ODocument[“所有者”]->com.orientechnologies.orient.core.record.impl.ODocument[“所有者”]->com.orientechnologies.orient.core.record.impl.ODocument[“所有者”]->com.orientechnologies.orient.core.record.impl.ODocument[“所有者”]->com.orientechnologies.orient.core.record.impl.ODocument[“所有者”]->com.orientechnologies.orient.core.record.impl.ODocument[“所有者”]->com.orientechnologies.orient.core.record.impl.ODocument[“所有者”]->com.orientechnologies.orient.core.record.impl.ODocument[“所有者”]->com.orientechnologies.orient.core.record.impl.ODocument[“所有者”]->com.orientechnologies.orient.core.record.impl.ODocument[“所有者”])
进程已完成,退出代码为1

首先,我非常建议您不要使用Graph API进行变异。最好使用Traversal API进行变异,并执行以下操作:

g.addV('Test').
  property('title1', 'abc').
  property('title2', 'abc')
第二,我认为发生错误是因为您返回了一个
顶点
,其中包含一个
或cordid
,这是顶点标识符,而Gremlin服务器不知道如何处理它。我不知道OrientDB是否构建了序列化程序来处理这个问题,但如果它们这样做了,那么您将需要使用des更详细一点——基本上,您会想知道OrientDB是否公开了TinkerPop
IORegistry
,用于所有可能通过网络发回的自定义类

如果它们不返回,那么您将希望避免返回它们或自己转换它们。TinkerPop已经建议您不要返回完整的
Vertex
对象,而只返回您需要的数据。因此,与其
g.V()
,不如将
Vertex
转换为
Map
with
g.V().valueMap('title')
或类似的内容(可能使用
project()
step)。如果您确实需要顶点标识符,则需要将其转换为TinkerPop序列化程序能够理解的内容。这可能意味着一些简单的事情,如:

g.V().has("title1","abc").id().next().toString()
关于“…使用Graph API进行变异。因此更喜欢Traversal API…”我做了一些测试,发现Traversal AP