如何在 Python 中使用 Neo4j

在 Python 中使用 Neo4j

要在 Python 中连接和操作 Neo4j 数据库,通常使用官方的 neo4j 驱动程序(neo4j Python Driver)。


1. 安装 Neo4j Python 驱动

使用 pip 安装:

pip install neo4j

2. 连接 Neo4j 数据库

首先,你需要在本地或远程运行 Neo4j 数据库。默认端口是 7687,使用 bolt 协议进行通信。

连接 Neo4j 示例

from neo4j import GraphDatabase

# 连接信息
uri = "bolt://localhost:7687"  # Neo4j 连接地址
username = "neo4j"              # 用户名(默认 neo4j)
password = "your_password"      # 数据库密码

# 创建驱动实例
driver = GraphDatabase.driver(uri, auth=(username, password))

# 关闭连接
driver.close()
  • uri:指定使用 bolt 协议连接 Neo4j,bolt:// 是默认的协议。
  • auth:提供用户名和密码进行身份验证。

3. 使用 Session 执行 Cypher 查询

Neo4j 使用 Cypher 作为查询语言,可以通过 session 运行 Cypher 语句。


3.1 创建 Session

with driver.session() as session:
    result = session.run("MATCH (n) RETURN n LIMIT 5")
    for record in result:
        print(record)
  • session.run():执行 Cypher 语句。
  • record:包含查询返回的每一条数据。

3.2 执行 Cypher 语句

创建节点
def create_person(tx, name, age):
    query = "CREATE (p:Person {name: $name, age: $age})"
    tx.run(query, name=name, age=age)

with driver.session() as session:
    session.write_transaction(create_person, "Alice", 30)
    session.write_transaction(create_person, "Bob", 25)
  • tx.run():执行 Cypher 语句,$name$age 是参数。
  • session.write_transaction():用于写入数据的事务。

查询节点
def get_person(tx, name):
    query = "MATCH (p:Person {name: $name}) RETURN p.name, p.age"
    result = tx.run(query, name=name)
    for record in result:
        print(f"Name: {record['p.name']}, Age: {record['p.age']}")

with driver.session() as session:
    session.read_transaction(get_person, "Alice")
  • session.read_transaction():用于读取数据的事务。

创建关系
def create_friendship(tx, name1, name2):
    query = """
    MATCH (a:Person {name: $name1}), (b:Person {name: $name2})
    CREATE (a)-[:FRIENDS_WITH]->(b)
    """
    tx.run(query, name1=name1, name2=name2)

with driver.session() as session:
    session.write_transaction(create_friendship, "Alice", "Bob")

查询关系
def get_friends(tx, name):
    query = """
    MATCH (p:Person {name: $name})-[:FRIENDS_WITH]->(friend)
    RETURN friend.name
    """
    result = tx.run(query, name=name)
    friends = [record["friend.name"] for record in result]
    return friends

with driver.session() as session:
    friends = session.read_transaction(get_friends, "Alice")
    print("Alice's friends:", friends)

更新节点
def update_person_age(tx, name, age):
    query = "MATCH (p:Person {name: $name}) SET p.age = $age"
    tx.run(query, name=name, age=age)

with driver.session() as session:
    session.write_transaction(update_person_age, "Alice", 35)

删除节点
def delete_person(tx, name):
    query = "MATCH (p:Person {name: $name}) DELETE p"
    tx.run(query, name=name)

with driver.session() as session:
    session.write_transaction(delete_person, "Bob")

4. 使用 Neo4j 与 Flask 整合

如果你想在 Flask Web 应用 中使用 Neo4j,可以创建一个简单的 API。

Flask + Neo4j 示例

from flask import Flask, request, jsonify
from neo4j import GraphDatabase

app = Flask(__name__)

# Neo4j 配置
uri = "bolt://localhost:7687"
username = "neo4j"
password = "your_password"

# 创建 Neo4j 驱动
driver = GraphDatabase.driver(uri, auth=(username, password))


@app.route("/create_person", methods=["POST"])
def create_person():
    data = request.json
    name = data["name"]
    age = data["age"]
    
    with driver.session() as session:
        session.write_transaction(lambda tx: tx.run(
            "CREATE (p:Person {name: $name, age: $age})", name=name, age=age
        ))
    return jsonify({"message": f"Person {name} created successfully"})


@app.route("/get_person/<name>", methods=["GET"])
def get_person(name):
    with driver.session() as session:
        result = session.read_transaction(lambda tx: tx.run(
            "MATCH (p:Person {name: $name}) RETURN p.name, p.age", name=name
        ))
        record = result.single()
        if record:
            return jsonify({"name": record["p.name"], "age": record["p.age"]})
        else:
            return jsonify({"error": "Person not found"}), 404


if __name__ == "__main__":
    app.run(debug=True)

5. Neo4j 常用 Cypher 语句

1. 创建节点

CREATE (a:Person {name: "Alice", age: 30})

2. 查询所有节点

MATCH (n) RETURN n

3. 查询特定节点

MATCH (a:Person {name: "Alice"}) RETURN a

4. 创建关系

MATCH (a:Person {name: "Alice"}), (b:Person {name: "Bob"})
CREATE (a)-[:FRIENDS_WITH]->(b)

5. 删除节点及其关系

MATCH (a:Person {name: "Alice"}) DETACH DELETE a

6. 使用 Docker 运行 Neo4j

1. 拉取 Neo4j 镜像

docker pull neo4j

2. 启动 Neo4j 容器

docker run -d \
  --name neo4j \
  -p 7474:7474 -p 7687:7687 \
  -e NEO4J_AUTH=neo4j/password \
  neo4j
  • 7474:HTTP 访问端口
  • 7687:Bolt 连接端口
  • NEO4J_AUTH=neo4j/password:设置 Neo4j 认证信息

7. 关闭 Neo4j 连接

连接完成后需要关闭驱动程序:

driver.close()

总结

  1. Neo4j 使用 neo4j Python 驱动来连接、查询和管理图数据。
  2. Cypher 是 Neo4j 的查询语言,类似 SQL。
  3. 可以通过 Python 进行 CRUD 操作(创建、查询、更新、删除)。
  4. Flask 可以轻松与 Neo4j 整合,实现 Web API。
  5. Neo4j 通常通过 bolt:// 协议在 7687 端口上进行通信。
### Python环境下Neo4j的安装与配置 #### 安装JDK 为了使Neo4j正常工作,因为其依赖于Java虚拟机(JVM),所以需要先安装Java Development Kit (JDK)。对于希望后续能够支持Spring Boot框架的情况来说,建议至少选择版本为1.8的JDK环境[^1]。 ```bash # 对于Linux用户可以使用如下命令来安装OpenJDK 8 sudo apt-get update && sudo apt-get install openjdk-8-jdk -y ``` 确认已成功安装并设置好JAVA_HOME变量: ```bash java -version echo $JAVA_HOME ``` #### Neo4j服务器端安装 完成上述准备工作之后,接着按照官方指南下载适合操作系统平台对应的Neo4j二进制包,并解压到指定位置。启动服务前需编辑`conf/neo4j.conf`文件调整必要的参数设定,比如内存分配策略等。 #### 配置Python客户端访问Neo4j 为了让Python程序能够连接至本地或远程部署好的Neo4j实例,在项目里引入py2neo库是一个不错的选择。通过pip工具很容易就能搞定这个第三方模块的获取过程[^2]。 ```bash pip install py2neo==4.3.0 ``` 编写一段简单的测试脚本来验证连通性状况: ```python from py2neo import Graph, Node, Relationship graph = Graph("http://localhost:7474", auth=("neo4j", "password")) result = graph.run("MATCH (n) RETURN count(DISTINCT labels(n))").data() print(result) ``` 这段代码尝试建立同本地图数据库之间的会话链接,并执行一条查询语句返回节点标签的数量统计结果。注意替换掉默认用户名密码组合(`neo4j/password`)以匹配实际场景下的安全认证需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彬彬侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值