00286 neo4j 入门教程


前言

以下是一份利用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)

实际应用场景

  1. 社交网络: 查询N度人脉关系
  2. 推荐系统: “购买此商品的人也买了…”
  3. 欺诈检测: 分析异常关系网络
  4. 知识图谱: 实体关系可视化

注意事项

  • 使用driver.close()关闭连接
  • 批量操作时使用UNWIND提升性能
  • 避免深度过大的遍历查询(可设置最大深度)

参考资料

结语

第二百八十六篇博文写完,开心!!!!

今天,也是充满希望的一天。


文章作者: LuYF-Lemon-love
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 LuYF-Lemon-love !
  目录