Neo4j如何在python中访问节点的属性

pvabu6sv  于 2022-11-05  发布在  Python
关注(0)|答案(4)|浏览(224)

我可以像这样查询图表数据库

from neo4j import GraphDatabase

# establish connection

graphdp = GraphDatabase.driver(uri="bolt://localhost:7687", auth=("neo4j","Python"))

session = graphdp.session()

q1="MATCH (n {id:0}) return n"
nodes = session.run(q1)

for node in nodes:
    print(node)

其结果是:

<Record n=<Node id=5 labels={'Ubuntu1604'} properties={'host_image': 'qsrf-56fh-3db5-xd4t', 'id': 0}>>
<Record n=<Node id=6 labels={'Ubuntu1804'} properties={'host_image': 'qsrf-56fh-3dd4-44ty', 'id': 0}>>
<Record n=<Node id=7 labels={'Network'} properties={'start': '', 'capability': 'connection', 'cidr': '', 'end': '', 'nameservers': '[10.0.71.254, 8.8.4.4, 8.8.8.8]', 'id': 0}>>
<Record n=<Node id=8 labels={'Port'} properties={'port_ip': '', 'requirement': '["container","connection"]', 'id': 0}>>
<Record n=<Node id=13 labels={'GuestLinuxUser'} properties={'id': 0, 'playbook': 'createLinuxUser'}>>
<Record n=<Node id=16 labels={'GuestWindowsUser'} properties={'id': 0, 'playbook': 'createWindowsUser'}>>

Process finished with exit code 0

如何访问每个节点属性?

vzgqcmou

vzgqcmou1#

您可以保存BoltStatmentResult对象数据,然后通过Node.get()方法访问节点属性:

q1="MATCH (n {id:0}) return n"
nodes = session.run(q1)
results = [record for record in nodes.data()]

# Now you can access the Node using the key 'n' (defined in the return statement):

res[0]['n'].get('host_image')

我在www.example.com()迭代中将元素命名为'record'nodes.data,因为如果您的RETURN返回了不止一个条目,那么record!= node。它是RETURN中条目的字典。
然后,您可以访问节点数据类型的任何方法,以下是docs参考
例如:

node = res[0]['n']
labels = list(node.labels)
5t7ly7z5

5t7ly7z52#

属性“properties”在类“Node”中是私有的(该类在“neo4j/graph/init.py”中)我在类“Node”中添加了以下方法:

def get_properties(self):
    return self._properties

然后,您可以通过instance_of_your_node.get_properties()访问这些属性

ozxc1zmp

ozxc1zmp3#

正如我在neo4j包中看到的,类Node继承自Entity类,Entity类拥有_properties属性。问题是这个属性不能从类Node范围之外访问。
要解决这个问题,你可以给自己定义getter:

def get_properties(self):
    return self._properties

并将此方法绑定到您Node示例:

node.get_properties = types.MethodType(get_properties, node)
node.get_properties()

这样,您就不必在lib中更改任何内容。

wj8zmpe1

wj8zmpe14#

很遗憾,在python中没有办法将Neo4j驱动的Node对象转换成dictionary/json对象,所以需要自己动手,这里有一个简单的方法:

def node_to_json(neo4j_node):
    '''
    Convert a neo4j node object into json/dict
    :param neo4j_node:
    :return: node in json/dict format
    '''

    json_version = {}
    for items in neo4j_node.items():
        json_version[items[0]] = items[1]

    return json_version

相关问题