如何在 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()
总结
- Neo4j 使用
neo4j
Python 驱动来连接、查询和管理图数据。 - Cypher 是 Neo4j 的查询语言,类似 SQL。
- 可以通过 Python 进行 CRUD 操作(创建、查询、更新、删除)。
- Flask 可以轻松与 Neo4j 整合,实现 Web API。
- Neo4j 通常通过
bolt://
协议在 7687 端口上进行通信。