1

我想用 Python API 在 RedisGraph 中执行一批查询,以加快大知识图的创建。

Neo4J中,Neo4J Python API 可以使用UNWIND命令并允许并行化查询。在这个片段中,您可以看到 Python API 如何支持UNWIND - 该run方法batch作为参数。batch是一个字典列表。每个字典都有head_id,tail_idproperties作为键。

with session.begin_transaction() as tx:  # In this transaction relationships are inserted in the database
    cypher_query = 'UNWIND $batch as row ' \
    'MATCH (head:Node) WHERE head.id = row.head_id ' \
    'MATCH (tail:Node) WHERE tail.id = row.tail_id ' \
    'CREATE (head)-[rel:RELATIONSHIP]->(tail) ' \
    'SET rel += row.properties'

     tx.run(cypher_query, batch=batch)

RedisGraph中,UNWIND也可用(因为它是一个 Cypher 命令)。但是,我不知道如何在 Python API 中传递批处理:

cypher_query = 'UNWIND $batch as row ' \
        'MATCH (head:Node) WHERE head.id = row.head_id ' \
        'MATCH (tail:Node) WHERE tail.id = row.tail_id ' \
        'CREATE (head)-[rel:RELATIONSHIP]->(tail) ' \
        'SET rel += row.properties'
r = redis.StrictRedis()
r.execute_command('GRAPH.QUERY', graph_name, cypher_query)  #No batch can be passed!!

你知道解决办法吗?谢谢。

4

2 回答 2

1

这是 RedisLabs 开发团队的答案:

github.com/RedisGraph/RedisGraph/issues/1293

截至目前,该功能尚不支持,但将在未来推出。

于 2020-08-18T12:41:10.127 回答
1

redisgraph-py自述文件显示了如何通过其方法传递参数的示例:query()

...
params = {'purpose':"pleasure"}
query = """MATCH (p:person)-[v:visited {purpose:$purpose}]->(c:country)
     RETURN p.name, p.age, v.purpose, c.name"""

result = redis_graph.query(query, params)
...

如果真的需要execute_command()改用,可以看看是如何query()实现的

于 2020-08-17T18:19:41.613 回答