Cypher 文件作为 py2neo 中的参数 python

Cypher file as parameter in py2neo python

我正在尝试传递一个 cypher 文件作为 py2neo 中的参数,以便将查询中的变量作为其他参数。 而不是:

from py2neo import Graph

graph = Graph(password = "*****")

def test(some_things):
    result = graph.run(
                "MATCH (movie:movies)"
                "where movie.name =~ $name "
                "RETURN movie",{"name":"(?i).*" + some_things+ ".*"})
    return result

我想知道是否有这样的事情:

from py2neo import Graph

graph = Graph(password = "*****")

def test(some_things):
    result = graph.run("some_cypher.cypher", some_things)
    return result

其中 some_cypher.cypher 可能是:

MATCH (movie:movies) where movie.name =~ $name RETURN movie, ,{"name":"(?i).*" + ?+ ".*"}

其中 ? 是要在 python 文件中被 some_things 替换的参数。

py2neo 中没有内置此类功能。如果你想这样做,你必须推出自己的功能。

虽然在 py2neo 中没有直接从文件读取的内置选项,但有一种机制可以根据需要获取一系列参数。因此,剩下的就是使用一个函数从文件中读取查询并使用参数。这应该看起来像:

from py2neo import Graph

graph = Graph(password = "*****")


def run_query_from_file(cypher_file_path,  parameters=None, **kwparameters):
    with open(cypher_file_path, 'r') as cypher_file:
          cypher_query = cypher_file.read().strip()
    graph.run(cypher_query, parameters)

def test1(dict_of_parameters):
    result = run_query_from_file("some_cypher.cypher", dict_of_parameters)
    return result

def test2(**kwparameters):
    result = run_query_from_file("some_cypher.cypher", **kwparameters)
    return result

# Both should work
test1({'username': 'abc', 'password': '123'})
test2('username'='abc', 'password'='123')

其中 some_cypher.cypher 包含:

MERGE (user:User {username:$username}) WITH user, user.password as user_password SET user.password = $password RETURN user_password