python 与 neo4j 交互(py2neo 使用)

04-26 1199阅读

参考自:neo4j的python.py2neo操作入门

官方文档:The Py2neo Handbook — py2neo 2021.1

安装:pip install py2neo -i https://pypi.tuna.tsinghua.edu.cn/simple

1 节点 / 关系 / 属性 / 路径

节点(Node)和关系(relationship)是构成图的基础,节点和关系都可以有多个属性(property),并且均可以作为实体

重点:

  1. 节点:在图数据库中,节点代表实体,可以拥有属性和标签。节点通常用来表示实际的数据实体,比如人、地点、事件等
  2. 关系:关系描述了节点之间的连接或关联,必须包含两个节点,且具有方向:start node →end node
  3. 路径:路径是由节点和关系组成的序列,描述了节点之间的连接路径。路径是一个完整的图形结构,由起始节点、关系和结束节点组成,表示了实体之间的关系和连接方式
  4. 属性:键-值(key-value),键是字符串类型,值,可以是原数据,也可以由原数据同类型的数组
  5. 对于一个节点来说,与之相连的关系是有输入和输出两个方向。(如node2有输入关系和输出关系:node1→node2→node3),这个特性对于遍历图很重要
  6. 一个节点可以有一个关系是指向自己的

2 连接neo4j

前置安装:

配套资料:配套资料

安装Neo4j

下载配套资料中的neo4j-community-3.5.5-windows和jdk-11.0.2_windows-x64_bin

neo4j解压即可,jdk就常规安装

完成之后需要将neo4j和jdk的bin目录都配置为环境变量(即path中,若不懂请自行百度)

验证安装:

cmd窗口下 java -version

注: 若之前配置过jdk,需要将新配置的jdk上移到环境变量的最上方,或者直接删除以前配置过的jdk,然后重新打开cmd窗口进行验证安装

cmd下启动Neo4j

neo4j.bat console

访问http://localhost:7474/,用户名和密码都输入neo4j,并连接(注意命令行窗口不能关闭),之后重新设置密码(建议设置为123456)

#cmd窗口下

neo4j.bat console

浏览器访问 http://localhost:7474/

3 创建图对象

from py2neo import Graph, Subgraph
from py2neo import Node, Relationship, Path
# 连接数据库
# graph = Graph('http://localhost:7474', username='neo4j', password='123456') # 旧版本
graph = Graph('bolt://localhost:7687', auth=('neo4j', '123456'))
# 删除所有已有节点
graph.delete_all()

4 数据类型及操作

4.1 Node:节点

基本语法:Node(*labels,**properties)

# 定义node
node_1 = Node('英雄',name = '张无忌')
node_2 = Node('英雄',name = '杨逍',武力值='100')
node_3 = Node('派别',name = '明教')
# 存入图数据库
graph.create(node_1)
graph.create(node_2)
graph.create(node_3)
print(node_1)

python 与 neo4j 交互(py2neo 使用)

4.2 Relationship:关系

基本语法:Relationship((start_node, type, end_node, **properties))

# 增加关系
node_1_to_node_2 = Relationship(node_2,'教主',node_1)
node_3_to_node_1 = Relationship(node_1,'统领',node_3)
node_2_to_node_2 = Relationship(node_2,'师出',node_3)
graph.create(node_1_to_node_2)
graph.create(node_3_to_node_1)
graph.create(node_2_to_node_2)

python 与 neo4j 交互(py2neo 使用)

4.3 Path:路径

基本语法:Path(*entities)

注:entities是实体

# 建一个路径:比如按照该路径查询,或者遍历的结果保存为路径
node_4,node_5,node_6 = Node(name='阿大'),Node(name='阿三'),Node(name='阿二')
path_1 = Path(node_4,'小弟',node_5,Relationship(node_6, "小弟", node_5),node_6) # (阿大)-[:小弟 {}]->(阿三)'英雄'}))
# 遍历查询到的节点
print('=' * 15, '遍历所有节点', '=' * 15)
for node in iter(nodess):
    print(node)
# 查询结果计数
print('=' * 15, '查询结果计数', '=' * 15)
print(nodess.count())
# 按照武力值排序查询结果:注意引用字段的方式,前面要加下划线和点:_.武力值
print('=' * 10, '按照武力值排序查询结果', '=' * 10)
wu = nodess.order_by('_.武力值')
for i in wu:
    print(i)
VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]