首页 > 其他分享 >使用py2neo对Neo4j进行操作

使用py2neo对Neo4j进行操作

时间:2023-01-24 14:11:24浏览次数:47  
标签:node name py2neo graph label relation 操作 Neo4j 节点

使用py2neo对Neo4j进行操作

安装

Java 17

下载

没安装Java的需要先安装Java,具体版本参照官方手册

https://neo4j.com/docs/operations-manual/current/installation/windows/

下载地址

https://www.oracle.com/java/technologies/downloads/#java17

安装

下载完成点击执行文件按步骤安装

安装之后配置环境变量。

Windows下:

  • 用户变量中:新建JAVA_HOME变量,值为安装目录

    例:D:\Java\jdk-17

  • 环境变量中:Path中添加%JAVA_HOME%\bin

测试

win+R打开cmd,输入java -version,显示java版本为17就行

Neo4j

neo4j社区版

https://neo4j.com/download-center/#community

按照下载后的提示走

之后win+R打开cmd,执行安装目录\bin\neo4j console

例如:D:\neo4j\bin\neo4j console

访问http://localhost:7474/即可看到操作页面

python操作

驱动

neo4j-driver

原名neo4j-driver,现在改成了neo4j

pip install neo4j

py2neo

这里主要使用

pip install py2neo

基础示例

from py2neo import Node, Relationship, Graph

USERNAME = username
PASSWORD = password

# 新建图形
graph = Graph('http://localhost:7474', auth=(USERNAME, PASSWORD), name='neo4j')

# 新建node
# Node(labels, *properties)
a = Node('label', name='a')
b = Node('label', name='b')

# 在graph中绘制node
graph.create(a)
graph.create(b)

# 新建关系并绘制
# 可以增加一些属性,也可以省略
# Relationship(start_node, type, end_node, **properties)
r1 = Relationship(a, 'to', b, name='to')
graph.create(r1)

数据库操作(主要是节点和关系)

在所有操作前要有

USERNAME = your username
PASSWORD = your password
NAME = your database name
graph = Graph('http://localhost:7474', auth=(USERNAME, PASSWORD), name=NAME)

  • 添加节点

    node = Node("Person", name="Alice", id=node_1)
    graph.create(node)
    

    第一个参数为节点的label,第二个为节点的名字,会显示在Neo4图中,第三个是节点的id,是我自定义的主键,方便查找。

    都不是必须的,后两个是节点的特性(Properties)

  • 添加label

    node.add_label("Women")
    
  • 添加特性(Properties)

    node["age"] = 25
    

    将new_name特性的值设置为value

  • 添加关系

    node_1 = Node("Person", name="Alice", id="node_1")
    node_2 = Node("Person", name="Bob", id="node_2")
    
    # 1.第一种方法
    relationship = Relationship(node_1, "KNOWS", node_2)
    graph.create(relationship)
    
    # 2.第二种方法
    class Knows(Relationship): pass
    ab = Knows(node_1, node_2)
    graph.create(ab)
    
    # 3.第三种方法
    KNOWS = Relationship.type("KNOWS")
    ab = KNOWS(node_1, node_2)
    graph.create(ab)
    
  • 添加子图

    node_1 = node_matcher.match("Person").where(id='node_1').first()
    node_2 = node_matcher.match("Person").where(id='node_2').first()
    node_3 = node_matcher.match("Person").where(id='node_3').first()
    node_4 = node_matcher.match("Person").where(id='node_4').first()
    
    KNOWS = Relationship.type("KNOWS")
    ab = KNOWS(node_1, node_2)
    ac = KNOWS(node_1, node_3)
    s = ab | ac
    graph.create(s)
    

在查询之前

from py2neo import NodeMatcher, RelationshipMatcher
node_matcher = NodeMatcher(graph)
relation_matcher = RelationshipMatcher(graph)
  • 查询节点

    node = node_matcher.match("Person").where(name="Alice").first()
    

    match()的参数是label,不必须,where()的参数是Properties,不必须

    match的结果是一个list,所以需要添加.first()

  • 查询关系

    查询图中所有关系

    relation = list(relation_matcher.match((node, None), r_type='idea'))
    

    若要想通过节点或者关系名称查询前提是该节点已经查找出来,或者知道关系是什么

    # 只知道起始节点
    relation = list(relation_matcher.match((start_node, None)))
    
    # 只知道结束节点
    relation = list(relation_matcher.match((None, end_node)))
    
    # 只知道关系type
    relation = list(relation_matcher.match(r_type='Knows'))
    
    # 其余的可用以上三种组合得到
    
  • 查询label

    # 查询node是否含有label
    node.has_label(label)
    
    # 查询node的label
    node.labels
    
  • 查询特性(Properties)

    # 查询名为name的特性值
    # 1.第一种方法
    node["name"]
    # 2.第二种方法
    node_1.get("name")
    
    # 返回特性的个数
    len(node)
    
    # 返回特性的字典
    dict(node)
    # 将节点的特性和值以列表二元组形式返回
    node.items()
    # 将节点的特性名字返回
    node.key()
    # 将节点的特性值返回
    node.values()
    

改的前提是已经查找出来

  • 修改节点

    # 修改节点的特性
    node['name'] = 'May'
    
    # setdefault():如果有该特性,则返回其值,若没有则设置为'May'
    node.setdefault('name', default = 'May') 
    
    # 修改到这里只是对本地数据进行了修改
    # 若想在Neo4j中生效一定要添加这句
    graph.push(node)
    
  • 修改关系

    # 修改节点的特性
    relation['name'] = 'has'
    
    # setdefault():如果有该特性,则返回其值,若没有则设置为'May'
    relation.setdefault('name', default = 'has') 
    
    # 修改到这里只是对本地数据进行了修改
    # 若想在Neo4j中生效一定要添加这句
    graph.push(relation)
    

删除节点需要先删除该节点上的关系

  • 删除关系

    graph.separate(relationship)
    
  • 删除节点

    graph.delete(node)
    
  • 清空数据库

    graph.delete_all()
    
  • 删除label

    # 删除一个label,如果存在的话
    node.remove_label('Person')
    
    #删除所有label
    node.clear_label()
    
  • 删除特性

    # 删除一个特性,如果不存在就会有KeyError
    del node["name"]
    
    # 删除所有特性
    node.clear()
    

标签:node,name,py2neo,graph,label,relation,操作,Neo4j,节点
From: https://www.cnblogs.com/ryukirin/p/17066047.html

相关文章

  • Day06-字符串操作
    一、字符串的下标(索引)#获取正负索引数据sub_str=str_data[1] #y#[正索引]0开始取索引的格式 下标 获取单个数据print(sub_str)sub_str=str_data[-2] #o......
  • QT sqllite操作
    //添加sql模块      //打开数据库MainWindow::MainWindow(QWidget*parent):QMainWindow(parent),ui(newUi::MainWindow){ui->setupUi(this);......
  • 编写简单的button配合input实现上传文件操作
    <template> <button>导入文件<inputtype="file"@change="fileChange"accept=".*":disable="disable"/></button></template><script>d......
  • Day06 - 匿名函数和文件操作
    1.匿名函数lambdadef函数名(参数列表): 函数体'''匿名函数'''#万物皆对象#对象就会有内存地址,就会有一个引用#通过这个引用就可以找到该对象并使用它d......
  • springboot文件操作之更新头像
    就是在个人中心中,点击更改个人头像,上面立马更新的那种:利用了springboot的文件上传的技术,不知道的可以看看这个博客  由于这个侧边栏,上面栏,主屏幕属于三个部分,所以可......
  • python 控制鼠标操作
    importtimeimportpyautogui##必须以管理员身份运行此程序,不然鼠标点击会没有效果!!!defmoveAndClick():print("startapp")x,y=976,748#鼠标需要移动到的位......
  • Web自动化测试10:Selenium下拉选择框、弹出框、滚动条操作
    文章目录​​学习目标​​​​一、下拉选择框操作​​​​1.1如何操作下拉选择框​​​​1.2Select类​​​​1.3总结​​​​二、弹出框处理​​​​2.1案例​​​​2.......
  • Python语言基础—集合的常见操作方法
    希望本阶段内容可以帮助大家学好Python基础,详情可以关注上方Python专栏!文章目录​​系列文章目录​​​​一、创建集合​​​​二、集合常见操作方法​​​​2.1增加数据​......
  • Python语言基础—列表的常用操作
    希望本阶段内容可以帮助大家学好Python基础,详情可以关注上方Python专栏!文章目录​​系列文章目录​​​​一、列表的应用场景​​​​二、列表的格式​​​​三、列表的常用......
  • 基础的树状数组操作
    ​目录动态求连续区间和所以用到另一种方法——树状数组另一种方法——线段树完整线段树代码 数列区间最大值分析: 具体实现:数星星小朋友排队 分析:代码实现......