Neo4j+python学习

环境准备

Java Archive Downloads - Java SE 11 | Oracle 中国

Neo4j Download Center - Graph Database & Analytics

注册 Neo4j 服务
neo4j install-service
启动 Neo4j 服务
neo4j start

默认用户名,密码neo4j   neo4j

修改配置文件

找到neo4j-community-3.3.5\conf\neo4j.conf 文件,修改
#dbms.connector.http.listen_address=:7474
为 dbms.connector.http.listen_address=0.0.0.0:7474
远程bolt连接:
#dbms.connector.bolt.listen_address=:7687
改为:
dbms.connector.bolt.listen_address=0.0.0.0:7687
Defender 防火墙
要开启防火墙,配置入站规则。
允许7474,7687端口可被访问

下载neo4j的python驱动

py2neo安装出问题,而且21年之后不再支持。
建议使用官方接口neo4j deriver
conda activate au
#python -m pip install neo4j
这样默认最新的版本4.4.0(但是最新的是5.19)
python -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple –upgrade pip
换源更新
python -m pip install  -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade neo4j

使用

驱动连接

def test():
    uri = "bolt://192.168.253.1:7687"
    user = "neo4j"
    password = "123"
    driver= GraphDatabase.driver(uri, auth=(user, password))
    
    with driver.session() as session:
        session.write_transaction(func, param)

主要有以下几个数据类:

Driver

Neo4j 的主要接入点.

一个driver连接维护  Neo4j.session对象使用连接的一个连接池

主要方法:

execute_query()

在事务函数中执行查询并返回所有结果。

此方法是较低级别驱动程序 API 的方便包装器

session(**config)

创建一个会话,返回neo4j.session对象

verify_connectivity()

验证连接。

Sessions

所有数据库活动都通过两种机制进行协调:会话(neo4j.会话)和事务(neo4j.事务)

会话是任意数量的因果关系相关的事务性工作单元的逻辑容器。会话会自动保证群集环境中的因果一致性,但如果需要,也可以对多个会话进行因果链接。会话为数据库活动提供最高级别的遏制。会话创建是一个轻量级操作,会话不是线程安全的。

连接是从 neo4j 绘制的。根据需要提供驱动进程连接池

事务是一个工作单元,它要幺完整提交,要幺在失败时回滚。

read_transaction(transaction_function*args**kwargs)

Deprecated since version 5.0: Method was renamed to execute_read().

execute_read(transaction_function*args**kwargs)

在托管读取事务中执行工作单元。

当函数返回时,将自动提交此事务,除非在查询执行期间或用户代码引发异常。

execute_write(transaction_function*args**kwargs)

 

Transaction

有三种事务处理方式

Auto-commit transactions:自动提交事务是最简单的事务形式,通过 neo4j.Session.run() 方法可以实现。
这种方式简单易用,但每个事务只支持一条语句,并且在失败时不会自动重试。这种方式通常用于执行单一的操作,如插入、更新或删除单个节点或关系。 Explicit transactions:显式事务支持多条语句,需要通过显式调用 neo4j.Session.begin_transaction() 方法创建。
这会创建一个新的 neo4j.Transaction 对象,用于执行多个 Cypher 语句。通过显式事务,应用程序可以更精确地控制事务的边界和范围,确保一系列操作要么全部成功提交,要么全部回滚。 Transaction functions:事务函数是最强大的事务形式,提供了访问模式覆盖和重试能力。
neo4j.Session.execute_write() 和 neo4j.Session.execute_read() 方法允许将表示事务性工作单元的函数对象作为参数传递。这个函数会在可配置的时间限制内被调用一次或多次,直到成功为止。

 举例

def create_node(tx, name):
    tx.run("CREATE (n:Person {name: $name})", name=name)

with driver.session() as session:
    session.run("CREATE CONSTRAINT ON (p:Person) ASSERT p.name IS UNIQUE")
    session.run("DELETE (n) MATCH (n:Person)")

  # 使用自动提交事务创建节点
    session.run("CREATE (n:Person {name: 'Alice'})")
 # 使用显式事务创建节点
    with session.begin_transaction() as tx:
        create_node(tx, "Bob")
 # 使用事务函数创建节点
    def create_node_transaction(tx):
        create_node(tx, "Charlie")
    session.write_transaction(create_node_transaction)

Result

每次查询返回一个结果
在 Neo4j Python 驱动程序中,neo4j.Result 对象代表一个 Cypher 查询的结果集。下面是 neo4j.Result 对象常用的属性和方法:
属性:
keys:返回查询结果中的列名列表。
方法:
consume():消费结果并返回结果的元数据,包括列名等信息。
peek():查看结果集中的下一个记录,但不移动指针。
single():获取结果集中的下一个记录,并将指针移动到下一行。
next():获取结果集中的下一个记录,并将指针移动到下一行,与 single() 方法相同。
value(index_or_key):根据列索引或列名获取当前记录中指定列的值。
values():返回当前记录中所有列的值组成的列表。
records():返回一个迭代器,用于迭代结果集中的所有记录。
keys():返回查询结果中的列名列表,与 keys 属性相同。
这些方法和属性可用于检索和处理查询结果中的数据。例如,可以使用 single() 方法逐行处理查询结果,或使用 value() 方法根据列索引或列名检索特定列的值。

  

Result操作

 neo4j._sync.work.result.Result 对象

.single(): 如果查询结果只有一行,返回该行的数据,否则返回 None。  if re.single() is None:

.data(): 返回一个包含所有行数据的列表,每行数据以字典的形式表示。      if not re.data():

.value(): 返回单个结果值,通常用于处理聚合查询或者返回单个值的查询。  if re.value() is None:

.graph(): 返回查询结果的图形表示,包括节点和边。      graph = result.graph()      if len(graph.nodes) == and len(graph.relationships) == 0:

.consume(): 在事务中执行多个查询时,清除并忽略结果。   

 

 

Record对象

Record 对象的数据结构如下:

  • 它是一个不可变的有序集合,类似于元组(tuple),因此可以通过索引访问其中的元素。
  • 它还是一个映射(mapping),因此可以通过键值对的方式来访问其中的元素。

 例子:

  <Record n=<Node element_....>>

record[0] && record[‘n’]都可以读取record的对应字段的值。

 Node对象

< Node element_id  =  '15'
Labels   =  frozenset({'label'})
Properties  =  {'node': '5127935',}
>
node.keys()返回节点的属性的  键列表
node.labels, 获取标签
node.element_id  获取ID

 

posted @ 2024-04-23 23:21  zzl14  阅读(222)  评论(0)    收藏  举报