neo4j图数据库入门
neo4j安装
我看的是这一篇文章安装的,实测可用
neo4j中的增删改查
1.增
create (n: Person {name:'我',age:31}) //带有关系属性

结果:

没有报错,说明执行成功。可以看到节点也成功创建

create (p:Person{name:"我",age:"31"})-[:包工程{金额:10000}]->(n:Person{name:"好大哥 ",age:"35"})
结果:

2.删
(1)创建一个新的角色节点并删除
create(n:Person{name:"TYD",age:31})
match(n: Person{name: "TYD"}) delete n//删除节点

(2)删除节点之间的关系
两个有关系的节点不能直接删除,要先删除两点之间的关系。
match(p:Person{name:"我",age:"31"})-[f:包工程]->(n:Person{name:"好大哥 ",age:"35"})
delete f //删除关系
//delete f,p,n 也可以一次删除多个

(3)清空数据库
match(n)
detach delete n
3.改
(1)增加标签
match (t:Person) where id(t)=5 set t:好人 return t

(2)增加属性
match (a:好人) where id(a)=xxx set a.战斗力=200 return a//增加属性
match (a:好人) where id(a)=xxx set a.战斗力=500 return a//修改属性


4.查
有很多的查操作,可以参考neo4j的例子
match(p:Person)-[:包工程]->(n:Person) return p,n

neo4j与Python进行交互
基础语法
1.导读相关库,链接neo4j
from py2neo import Graph,Node,Relationship,NodeMatcher,Path,Subgraph
import py2neo
#g=Graph('http://localhost:7474',user='neo4j',password='neo4j')
#现在新版本写法不一样了
g = Graph('bolt://localhost:7687', auth=('neo4j', 'neo4j'))
2.删除所有已有节点
## 运行neo4j自身的命令
run("match(n) detach delete n")
#g.delete_all()
3.创建节点
基本语法:Node(*labels,**properties)
#创建节点,创建指令
#构建节点对象,要使用create方法后才会出现在neo4j数据库中
test_node_1 = Node("Person",name="我")#标签,属性
test_node_2 = Node("Person",name="好大哥")
#为节点添加属性
test_node_1['age']=23
test_node_1['sex']='男'
test_node_2['age']=18
test_node_2['sex']='女'
#创建节点
g.create(test_node_1)
g.create(test_node_2)

注意,这里的create是创建命令,如果重新运行的话就会再次创建两个属性标签相同的节点(ID不同)。想重新创建可以使用merge()函数,覆盖创建。

4.创建关系
基本语法:Relationship((start_node, type, end_node, **properties))
friend = Relationship(test_node_1,'friend',test_node_2)
g.create(friend)

5.查询
NodeMatcher:定位满足特定条件的节点
基本语法:NodeMatcher.match(*labels, **properties)
| 方法名 | 功能 |
|---|---|
| first() | 返回查询结果第一个Node,没有则返回空 |
| all() | 返回所有节点 |
| where(condition,properties) | 二次过滤查询结果 |
| order_by | 排序 |
matcher = NodeMatcher(g)
print(matcher.match("Person",name="我").first())
#匹配一个标签是人,属性姓名为“我”的第一个节点
![]()
6.路径
基本语法:Path(*entities)
注:entities是实体
连续设置关系

7.子图
节点和关系的任意集合,基本语法:Subgraph(nodes, relationships)
# 创建一个子图,并通过子图的方式更新数据库
node_6 = Node('Person',name = '老四')
node_7 = Node('Person',name = '老五')
node_8 = Node('Person',name = '老六')
relationship1 = Relationship(node_4,'小弟',node_6)
relationship2 = Relationship(node_4,'小弟',node_7)
relationship3 = Relationship(node_4,'小弟',node_8)
subgraph_1 = Subgraph(nodes = [node_6,node_7,node_8],relationships = [relationship1,relationship2,relationship3])
graph.create(subgraph_1)

8.工作流
(1)GraphService:基于图服务的工作流。
(2)Graph:基于图数据库的工作流(前文所述的基本上都是如此)。
(3)Transaction:基于事务的工作流
在一个事务里,进行多种操作,只有操作全部完成,工作流才算完成
如一个Transaction分两个任务:
- 增加一个新节点
- 将该节点与已有节点创建新关系
两个任务只要有一个没完成,整个工作流就不会生效
通常,该种方式通过Graph.begain(readonly=False)构造函数构造,参数readonly表示只读,无参数默认可写
# 创建一个新的事务
transaction_1 = graph.begin()
# 创建一个新node
node_9 = Node('Person',name = '小白')
transaction_1.create(node_10)#在该工作流中创建节点“小白”
# 创建两个关系:老四→(爸爸)→小白 老五→(干爹)→小白
relationship_4 = Relationship(node_9,'爸爸',node_6)
relationship_5 = Relationship(node_9,'干爹',node_7)
#在该工作流中创建两个关系
transaction_1.create(relationship_4)
transaction_1.create(relationship_5)
transaction_1.commit()
9.改
修改属性
# 给小白宝宝改名大白
node_6['name']='老四(大白)'
# 本地修改后要push到服务器上
graph.push(node_6)
10.删
(1)删除老六
# 删除一个节点及与之相连的关系
graph.run('match (n:Person{name:\'老六\'}) detach delete n')
*注意:单独删除一个节点时,需要先删除其关系,否则会报错。

(2)删除某一类型的关系
# 删除某一类型的关系
graph.run('match ()-[r:小弟]->() delete r;')

(3)删除子图
delete方法会删除这个子图,与这个子图的关联关系也会随之删除。
# 删除子图
g.delete( subgraph_1)

(4)删除所有
# 删除所有
g.delete_all()
红楼梦人物关系知识图谱
(数据集来源:开放知识图谱)
1.倒入库,链接neo4j
import csv
import py2neo
from py2neo import Graph,Node,Relationship,NodeMatcher
g = Graph('bolt://localhost:7687', auth=('neo4j', 'neo4j'))
2.读取文件的每一行
with open('红楼梦.csv','r') as f:
reader=csv.reader(f)#读取每一行数据
for item in reader:
if reader.line_num==1:#数据第一行是属性名,不要
continue
print("当前行数:",reader.line_num,"当前内容:",item)#方便观察

可以看到每一行的第一个值与第二个值之间是有关系的。第三个值为二者关系
3.循环创建知识图谱
with open('红楼梦.csv','r') as f:
reader=csv.reader(f)
for item in reader:
if reader.line_num==1:
continue
#print("当前行数:",reader.line_num,"当前内容:",item)
item = item[0].split(',')#切分字符串
start_node=Node("Person",name=item[0])#开始节点,item[0]:该行第一个值
end_node=Node("Person",name=item[1])#结束节点,,name=item[1]:该行第二个值
relation=Relationship(start_node,item[2],end_node)#item[3]中文关系
#merge覆盖创建
g.merge(start_node,"Person","name")
g.merge(end_node,"Person","name")
g.merge(relation,"Person","name")

参考:
python 与 neo4j 交互(py2neo 使用)_neo4j python-CSDN博客
更多推荐






所有评论(0)