py2neo (1.6) 如何在没有 CypherQuery 的情况下按节点 属性 获取现有节点
py2neo (1.6) how to get an existing node by node property without CypherQuery
我正在使用 py2neo(1.6 版)。我想通过图中的 属性 获取现有节点,然后使用它来创建关系。
我的解决方案:
graph = neo4j.GraphDatabaseService("http://...")
query = neo4j.CypherQuery(graph,"MATCH (n:NodeType) where n.property = 'property' return n")
r = query.execute()
if len(r.data)==0:
raise Exception("node does not exist")
node = r.data[0]['n']
newNode = batch.create(node(name="APropertyOfNewNode"))
batch.add_labels(newNode, "LableOfNewNode")
relation = rel(node, "relationshipName", newNode)
batch.create(relation)
batch.submit()
batch.clear()
是否有高级方法通过其 属性 获取现有节点而不使用 CypherQuery
和编写纯密码?
您可以使用 GraphDatabaseService.find:
from py2neo import neo4j
graph = neo4j.GraphDatabaseService('http://localhost:7474/db/data/')
movies = graph.find('Movie', 'title', 'The Matrix')
但是graph.find returns一个生成器对象。
movies
# <generator object find at 0x10b64acd0>
所以你只能迭代一次。
for movie in movies:
print type(movie)
print movie['tagline']
# <class 'py2neo.neo4j.Node'>
# Welcome to the Real World
我正在使用 py2neo(1.6 版)。我想通过图中的 属性 获取现有节点,然后使用它来创建关系。
我的解决方案:
graph = neo4j.GraphDatabaseService("http://...")
query = neo4j.CypherQuery(graph,"MATCH (n:NodeType) where n.property = 'property' return n")
r = query.execute()
if len(r.data)==0:
raise Exception("node does not exist")
node = r.data[0]['n']
newNode = batch.create(node(name="APropertyOfNewNode"))
batch.add_labels(newNode, "LableOfNewNode")
relation = rel(node, "relationshipName", newNode)
batch.create(relation)
batch.submit()
batch.clear()
是否有高级方法通过其 属性 获取现有节点而不使用 CypherQuery
和编写纯密码?
您可以使用 GraphDatabaseService.find:
from py2neo import neo4j
graph = neo4j.GraphDatabaseService('http://localhost:7474/db/data/')
movies = graph.find('Movie', 'title', 'The Matrix')
但是graph.find returns一个生成器对象。
movies
# <generator object find at 0x10b64acd0>
所以你只能迭代一次。
for movie in movies:
print type(movie)
print movie['tagline']
# <class 'py2neo.neo4j.Node'>
# Welcome to the Real World