如何使用 Gremlin Python 以字符串形式运行查询

问题描述 投票:0回答:1

我正在使用 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 amazon-neptune gremlinpython
1个回答
0
投票

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)
© www.soinside.com 2019 - 2024. All rights reserved.