前言
以下是一份利用Python学习Neo4j的入门教程,结合代码示例和关键概念说明。
Operating System: Ubuntu 22.04.4 LTS
Neo4j简介
Neo4j是一个高性能的图数据库,使用节点(Node)、关系(Relationship)和属性(Property)存储数据。适用于社交网络、推荐系统、知识图谱等需要处理复杂关系的场景。
环境准备
安装Neo4j
- 方式1: 下载桌面版 Neo4j Desktop
- 方式2: Docker快速启动
docker run --name my_neo4j -p 7474:7474 -p 7687:7687 -e NEO4J_AUTH=neo4j/password -d neo4j:latest
安装Python驱动
pip install neo4j # 官方驱动
# 或
pip install py2neo # 社区库(可选)
连接Neo4j数据库
from neo4j import GraphDatabase
URI = "bolt://localhost:7687"
USER = "neo4j"
PASSWORD = "password" # 替换为你的实际密码
driver = GraphDatabase.driver(URI, auth=(USER, PASSWORD))
def test_connection():
with driver.session() as session:
result = session.run("RETURN 'Hello Neo4j!' AS message")
print(result.single()["message"])
test_connection() # 输出: Hello Neo4j!
Cypher基础
Neo4j使用Cypher查询语言,语法特点:
()
表示节点-[]->
表示关系CREATE
创建数据MATCH
查询数据
示例:
CREATE (a:Person {name: 'Alice', age: 30})
CREATE (b:Person {name: 'Bob', age: 25})
CREATE (a)-[:FRIEND]->(b)
Python操作Neo4j
创建节点
def create_person(name, age):
with driver.session() as session:
query = """
CREATE (p:Person {name: $name, age: $age})
RETURN p
"""
result = session.run(query, name=name, age=age)
return result.single()
create_person("Charlie", 28)
查询数据
def find_person(name):
with driver.session() as session:
query = """
MATCH (p:Person {name: $name})
RETURN p.name AS name, p.age AS age
"""
result = session.run(query, name=name)
return [record for record in result]
print(find_person("Alice")) # 输出: [{'name': 'Alice', 'age': 30}]
创建关系
def create_friendship(name1, name2):
with driver.session() as session:
query = """
MATCH (a:Person {name: $name1}), (b:Person {name: $name2})
CREATE (a)-[r:FRIEND]->(b)
RETURN type(r)
"""
result = session.run(query, name1=name1, name2=name2)
return result.single()
create_friendship("Alice", "Charlie")
高级操作
事务管理
def complex_transaction():
with driver.session() as session:
tx = session.begin_transaction()
try:
tx.run("CREATE (:Book {title: 'Neo4j Guide'})")
tx.run("MATCH (b:Book) WHERE b.title = 'Neo4j Guide' SET b.price = 39.99")
tx.commit()
except Exception as e:
tx.rollback()
索引优化
CREATE INDEX FOR (p:Person) ON (p.name)
实际应用场景
- 社交网络: 查询N度人脉关系
- 推荐系统: “购买此商品的人也买了…”
- 欺诈检测: 分析异常关系网络
- 知识图谱: 实体关系可视化
注意事项
- 使用
driver.close()
关闭连接 - 批量操作时使用
UNWIND
提升性能 - 避免深度过大的遍历查询(可设置最大深度)
参考资料
结语
第二百八十六篇博文写完,开心!!!!
今天,也是充满希望的一天。