> 技术文档 > 如何在 Python 中使用 Neo4j_python连接neo4j

如何在 Python 中使用 Neo4j_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 friendswith 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, jsonifyfrom neo4j import GraphDatabaseapp = 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/\", 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\"}), 404if __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 端口上进行通信。