Neo4j Python 驱动库完整教程(带输入输出示例)

Neo4j Python 驱动库完整教程(带输入输出示例)

1. 基础连接示例

输入代码

python 复制代码
from neo4j import GraphDatabase

# 连接配置
URI = "bolt://localhost:7687"
USER = "neo4j"
PASSWORD = "password123"  # 替换为你的实际密码

def test_connection():
    driver = GraphDatabase.driver(URI, auth=(USER, PASSWORD))
    try:
        driver.verify_connectivity()
        server_info = driver.get_server_info()
        print("连接信息:")
        print(f"地址: {URI}")
        print(f"版本: {server_info.agent}")
    except Exception as e:
        print(f"连接失败: {e}")
    finally:
        driver.close()

test_connection()

示例输出

复制代码
连接信息:
地址: bolt://localhost:7687
版本: Neo4j/5.13.0

2. 基本CRUD操作

输入代码

python 复制代码
class Neo4jCRUD:
    def __init__(self, uri, user, password):
        self.driver = GraphDatabase.driver(uri, auth=(user, password))

    def create_person(self, name, age):
        with self.driver.session() as session:
            result = session.execute_write(
                self._create_person, name, age
            )
            return result

    @staticmethod
    def _create_person(tx, name, age):
        query = (
            "CREATE (p:Person {name: $name, age: $age}) "
            "RETURN p.name AS name, p.age AS age"
        )
        result = tx.run(query, name=name, age=age)
        return result.single()

# 使用示例
crud = Neo4jCRUD(URI, USER, PASSWORD)
print("创建节点:")
result = crud.create_person("Alice", 30)
print(result)
crud.close()

示例输出

复制代码
创建节点:
{'name': 'Alice', 'age': 30}

3. 查询操作

输入代码

python 复制代码
def find_person(name):
    driver = GraphDatabase.driver(URI, auth=(USER, PASSWORD))
    with driver.session() as session:
        result = session.execute_read(
            lambda tx: tx.run(
                "MATCH (p:Person {name: $name}) RETURN p",
                name=name
            ).single()
        )
        return dict(result["p"]) if result else None

print("\n查询结果:")
alice = find_person("Alice")
print(alice)

示例输出

复制代码
查询结果:
{'name': 'Alice', 'age': 30}

4. 关系创建

输入代码

python 复制代码
def create_movie_and_relationship():
    driver = GraphDatabase.driver(URI, auth=(USER, PASSWORD))
    with driver.session() as session:
        # 创建电影节点
        movie = session.execute_write(
            lambda tx: tx.run(
                "CREATE (m:Movie {title: $title, year: $year}) RETURN m",
                title="The Matrix", year=1999
            ).single()
        )
        
        # 创建关系
        relationship = session.execute_write(
            lambda tx: tx.run(
                """MATCH (p:Person {name: $name}), (m:Movie {title: $title})
                CREATE (p)-[r:ACTED_IN {role: $role}]->(m)
                RETURN p.name, type(r), m.title""",
                name="Alice", title="The Matrix", role="Neo"
            ).single()
        )
        return relationship

print("\n创建关系结果:")
rel_result = create_movie_and_relationship()
print(rel_result)

示例输出

复制代码
创建关系结果:
{'p.name': 'Alice', 'type(r)': 'ACTED_IN', 'm.title': 'The Matrix'}

5. 复杂查询

输入代码

python 复制代码
def find_actors_in_movie(movie_title):
    driver = GraphDatabase.driver(URI, auth=(USER, PASSWORD))
    with driver.session() as session:
        result = session.execute_read(
            lambda tx: tx.run(
                """MATCH (p:Person)-[r:ACTED_IN]->(m:Movie)
                WHERE m.title = $title
                RETURN p.name AS actor, r.role AS role""",
                title=movie_title
            ).data()
        )
        return result

print("\n电影演员查询:")
actors = find_actors_in_movie("The Matrix")
for actor in actors:
    print(f"{actor['actor']} 饰演 {actor['role']}")

示例输出

复制代码
电影演员查询:
Alice 饰演 Neo

6. 批量导入示例

输入代码

python 复制代码
def batch_import_people():
    people = [
        {"name": "Bob", "age": 25},
        {"name": "Charlie", "age": 35},
        {"name": "David", "age": 40}
    ]
    
    driver = GraphDatabase.driver(URI, auth=(USER, PASSWORD))
    with driver.session() as session:
        result = session.execute_write(
            lambda tx: tx.run(
                "UNWIND $people AS person "
                "CREATE (p:Person {name: person.name, age: person.age}) "
                "RETURN count(p) AS count",
                people=people
            ).single()
        )
        return result["count"]

print("\n批量导入结果:")
count = batch_import_people()
print(f"成功导入 {count} 个人物节点")

示例输出

复制代码
批量导入结果:
成功导入 3 个人物节点

7. 图形数据可视化示例

输入代码

python 复制代码
def visualize_graph():
    driver = GraphDatabase.driver(URI, auth=(USER, PASSWORD))
    with driver.session() as session:
        # 查询图形结构
        result = session.execute_read(
            lambda tx: tx.run(
                """MATCH (p:Person)-[r]->(m)
                RETURN p, r, m
                LIMIT 10"""
            ).graph()
        )
        
        # 打印图形结构信息
        print("\n图形结构信息:")
        print(f"节点数量: {len(result.nodes)}")
        print(f"关系数量: {len(result.relationships)}")
        
        # 打印前3个节点的详细信息
        print("\n节点示例:")
        for i, node in enumerate(list(result.nodes)[:3], 1):
            print(f"节点 {i}: {dict(node)}")
        
        # 打印关系示例
        print("\n关系示例:")
        for rel in list(result.relationships)[:2]:
            print(f"{rel.start_node['name']} -[{rel.type}]-> {rel.end_node['title']}")

visualize_graph()

示例输出

复制代码
图形结构信息:
节点数量: 5
关系数量: 1

节点示例:
节点 1: {'name': 'Alice', 'age': 30}
节点 2: {'title': 'The Matrix', 'year': 1999}
节点 3: {'name': 'Bob', 'age': 25}

关系示例:
Alice -[ACTED_IN]-> The Matrix

这些示例展示了从基础连接到复杂查询的完整流程,每个示例都包含明确的输入代码和对应的预期输出结果。

相关推荐
尤老师FPGA22 分钟前
LVDS系列21:Xilinx 7系ISERDESE2原语(二)
开发语言·php
amazinging1 小时前
北京-4年功能测试2年空窗-报培训班学测开-第五十四天
python·学习·面试
java1234_小锋3 小时前
【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 微博类别信息爬取
开发语言·python·flask
lishaoan775 小时前
用Python实现神经网络(四)
python·神经网络·多层神经网络
曾几何时`5 小时前
分别使用Cypher与python构建neo4j图谱
开发语言·python·机器学习
屁股割了还要学5 小时前
【C语言进阶】题目练习(2)
c语言·开发语言·c++·学习·算法·青少年编程
Hello.Reader5 小时前
Go-Redis 入门与实践从连接到可观测,一站式掌握 go-redis v9**
开发语言·redis·golang
007php0076 小时前
使用LNMP一键安装包安装PHP、Nginx、Redis、Swoole、OPcache
java·开发语言·redis·python·nginx·php·swoole