我正在使用 lambda 查询海王星图,我试图获取一组节点的输出路径。查询字符串是在代码中动态创建的,如下所示。我最初使用
Eval()
来执行此操作,但在进一步研究中,我发现 Eval() 存在很多问题,因此我想知道如何使用字符串查询来查询 Neptune 数据库?
for n in node_lst:
database_url = "wss://neptune-db:8182/gremlin"
connec = DriverRemoteConnection(
database_url, "g",
message_serializer=serializer.GraphSONSerializersV2d0(),
transport_factory=lambda:AiohttpTransport(call_from_event_loop=True)
)
g = traversal().withRemote(conn)
query_str = "g.with_('evaluationTimeout',50000).V(n).emit().times(max_hops).path().toList()"
query_result = str(eval(query_str))
conn.close()
// Process graph output
我从这里的其他帖子中看到,有一种方法可以使用
client.submit()
使用 this 代码将查询作为字符串,但据我了解,我们需要创建到本地运行的 Gremlin 服务器的 websocket 连接。在这种情况下,服务器不在本地运行。
我也尝试使用本地 Gremlin 服务器,但出现以下错误:
AttributeError: 'str' object has no attribute 'source_instructions'
Failed to interpret Gremlin query: Query parsing failed at line 1, character position at 2, error message : no viable alternative at input 'g.with_'"
我找不到与此相关的文档。有人可以帮助我如何使用字符串查询海王星吗?
Gremlin Python 客户端可以以字节码或文本形式发送查询,无论哪种方式,它都使用 Web 套接字连接。但是,如果您要将查询作为文本发送,则不会使用
DriverRemoteConnection
,而是使用 Client
类。请看下面的例子。
from gremlin_python.driver import client
def create_client(endpoin):
conn = client.Client(endpoint,'g')
return conn
def run_query(conn, query):
result = conn.submit(query)
future_results = result.all()
return future_results.result()
conn = create_client(endpoint)
query = 'g.V().limit(1)'
results = run_query(conn, query)