neo4j 图数据库 py2neo 操作 示例代码

发布时间:2024年01月14日

摘要

利用py2neo包,实现把excel表里面的数据,插入到neo4j 图数据库中;

  • 创建新(节点或关系)到neo4j图数据库中;
  • 能够获取neo4j 中已有的(节点或关系),不再创建新(节点或关系);

进阶, 敬请期待,案例

前置

安装py2neo: pip install py2neo
安装neo4j软件,请自行安装

NodeMatcher & RelationshipMatcher

代码由 Jupyter 编写,建议使用vscode

from py2neo import Graph, Node, NodeMatcher, RelationshipMatcher
import pandas as pd

# 连接到Neo4j数据库  
graph = Graph("bolt://localhost:7687", auth=("neo4j", "你设置的密码")) 

node_matcher = NodeMatcher(graph)
relationship_matcher = RelationshipMatcher(graph)

在这里插入图片描述

TODO: 设置neo4j 远程连接

创建节点

node = Node("Person", name="Alice", age=18)
graph.create(node)

在这里插入图片描述

查询获取节点

# 拿到匹配到的第一个节点
node_matcher.match('Person', name='Alice').first()

# 拿到可匹配到的所有
node_matcher.match('Person', name='Alice').all()

节点有则查询,无则创建

def get_node(class_, **kwargs):
    if node := node_matcher.match('Person', **kwargs):
        # 节点存在,则获取
        return node.first()
    else:
        # 节点不存在,则创建
        node = Node("Person", **kwargs)
        graph.create(node)
        return node

在这里插入图片描述

创建关系

Alice - Friend -> Bob

node1 = get_node('Person', name='Alice', age=21)
node2 = get_node('Person', name='Bob', age=20)

graph.create(
                Relationship(node1, 'Friend', node2)
            )

在这里插入图片描述

查询关系

查询 node1 和 node2 之间是否有 Friend 关系

node1 = get_node('Person', name='Alice', age=21)
node2 = get_node('Person', name='Bob', age=20)

relationship_matcher.match(
        [node1, node2],
        r_type='Friend'
    ).first()

关系有则查询,无则创建

def get_relation(node1, node2, r_type):
    if r :=  relationship_matcher.match(
                [node1, node2],
                r_type=r_type
            ):
        return r.first()
    else:
        r = Relationship(node1, r_type, node2)
        graph.create(r)
        return r
# 查询已有关系
get_relation(node1, node2, 'Friend')
# 创建新关系
get_relation(node1, node2, 'Classmate')

在这里插入图片描述

Cypher语句

虽然 在 NodeMatcher & RelationshipMatcher 介绍的接口已经能够满足大部分情况的使用,本文仍想提供一种使用cypher语句的插入数据到neo4j图数据库的思路。

创建节点

graph.run(
    "create (n:Person {name:'js'}) return n"
)
graph.run(
    "MERGE (n:Person {name: $name}) \
            ON CREATE SET n.created_at = timestamp() \
            return n",
    name='Cyder'
)
文章来源:https://blog.csdn.net/sjxgghg/article/details/135577301
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。