gremlin - gremlin python添加顶点KeyError
问题描述
我正在使用 gremlinpython。插入属性值大于 32 位的顶点会导致 KeyError。
g.addV('test').property('size', 2147483648).iterate()
File "/home/ec2-user/src/common/test.py", line 74, in insert_vertices
self.g.addV('test').property('size', 2147483648).iterate()
File "/home/ec2-user/venv/lib64/python3.6/dist-packages/gremlin_python/process/traversal.py", line 65, in iterate
try: self.nextTraverser()
File "/home/ec2-user/venv/lib64/python3.6/dist-packages/gremlin_python/process/traversal.py", line 70, in nextTraverser
self.traversal_strategies.apply_strategies(self)
File "/home/ec2-user/venv/lib64/python3.6/dist-packages/gremlin_python/process/traversal.py", line 506, in apply_strategies
traversal_strategy.apply(traversal)
File "/home/ec2-user/venv/lib64/python3.6/dist-packages/gremlin_python/driver/remote_connection.py", line 148, in apply
remote_traversal = self.remote_connection.submit(traversal.bytecode)
File "/home/ec2-user/venv/lib64/python3.6/dist-packages/gremlin_python/driver/driver_remote_connection.py", line 54, in submit
results = result_set.all().result()
File "/usr/lib64/python3.6/concurrent/futures/_base.py", line 432, in result
return self.__get_result()
File "/usr/lib64/python3.6/concurrent/futures/_base.py", line 384, in __get_result
raise self._exception
File "/home/ec2-user/venv/lib64/python3.6/dist-packages/gremlin_python/driver/resultset.py", line 90, in cb
f.result()
File "/usr/lib64/python3.6/concurrent/futures/_base.py", line 425, in result
return self.__get_result()
File "/usr/lib64/python3.6/concurrent/futures/_base.py", line 384, in __get_result
raise self._exception
File "/usr/lib64/python3.6/concurrent/futures/thread.py", line 56, in run
result = self.fn(*self.args, **self.kwargs)
File "/home/ec2-user/venv/lib64/python3.6/dist-packages/gremlin_python/driver/connection.py", line 80, in _receive
status_code = self._protocol.data_received(data, self._results)
File "/home/ec2-user/venv/lib64/python3.6/dist-packages/gremlin_python/driver/protocol.py", line 83, in data_received
result_set = results_dict[request_id]
KeyError: None
小于 32 位的值可以正常工作
g.addV('test').property('size', 2147483647).iterate()
将其转换为浮动也可以正常工作
g.addV('test').property('size', float(2147483648)).iterate()
本地运行的 gremlin 服务器和远程 Neptune DB 的行为相同。它在 gremlin 控制台上运行良好。所以我认为这不是服务器问题。
Python 版本 - 3.6 和 3.7
gremlinpython 版本 - 3.4.1
解决方案
您明确需要将该数字定义为long()
:
from gremlin_python.statics import *
g.addV('test').property('size', long(2147483648)).iterate()
推荐阅读
- c - 如何以给定的顺序杀死 2 个子进程
- python - 如何使单词大写的第一个字母?
- html - 如何使用 SVG 作为按钮 HTML/CSS
- css - Material UI 将 iPad(768px 宽和 1024px 高)视为一个小屏幕
- ios - 如何允许用户在 iOS 中一次仅在一台设备上使用该应用程序?
- web-scraping - Apify - 如何使用动态“下一页”按钮抓取多个页面(请求队列)?
- javascript - 对 Shopify 将客户发送到您指定的“应用 URL”的情况感到困惑
- github - GitHub Action - 如何在多个环境中部署发布?
- perl - 传递给函数后取消引用 perl 对象数组
- javascript - 在Javascript中循环遍历具有不同签名的函数数组的最佳实践?