基于 Neo4j Desktop 与 Python 构建知识图谱
目录
前期准备
1. 打开PowerShell
按 Win + R
输入 powershell
正常提示符:PS C:\Users\你的用户名>
没有 PS 的通常是 CMD
2. PowerShell 运行语句
软件安装
1. python
Neo4j 当前 Python 驱动要求 Python 3.10 及以上,Python 3.11 对初学者兼容性较稳。
-> 安装 Python
-> 安装完后打开 PowerShell
-> 检查 python --version
2. Vs Code
-> 安装 VS Code
-> 安装完后打开,在左侧扩展商店里安装 Microsoft 发布的 Python 扩展
3. Neo4j Desktop
官网下载安装包 Neo4j官网
由于neo4j-desktop2.x版本是不提供安装页面(默认安装在C盘)。因此,需要手动设置安装路径(在终端安装)。
操作流程
一. 创建项目和虚拟环境
1. 创建项目文件夹
执行:
New-Item -ItemType Directory -Path "E:\libraries\graphmap\demo1" -Force
- New-Item:创建新项目。
- -ItemType Directory:创建的是文件夹。
- -Path:指定文件夹路径。
- -Force:文件夹已经存在时不报错,也不会删除已有内容。
进入项目文件夹:
Set-Location "E:\libraries\graphmap\demo1"
- Set-Location:切换当前工作目录。
- 相当于常见的 cd 命令。
检查当前目录:
Get-Location
正常应显示:
Path
----
E:\libraries\graphmap\demo1
后面所有命令都在这个目录执行。
2. 检查python环境
执行:
python --version
- 查看安装的 Python 版本。
再检查 pip:
python -m pip --version
- python -m:使用当前 Python 运行一个模块。
- pip:Python 的第三方库安装工具。
3. 创建独立Python环境
执行:
python -m venv .venv
- python -m venv:运行 Python 自带的虚拟环境模块。
- .venv:虚拟环境文件夹名称。
执行成功后,项目中会出现:E:\libraries\graphmap\demo1\.venv
这个虚拟环境可以让demo1实例的 Python 库与其他项目隔离,防止版本互相影响。
检查激活脚本是否存在:
Test-Path .\.venv\Scripts\Activate.ps1
- Test-Path:检查指定路径是否存在。
- Activate.ps1:PowerShell 使用的虚拟环境激活脚本。
正常输出:True
如果输出 False,说明虚拟环境没有正确创建,重新执行:
python -m venv .venv
4. 设置 PowerShell 脚本权限
先检查:
Get-ExecutionPolicy -Scope CurrentUser
如果输出:RemoteSigned ,就不需要再设置。
否则,执行:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned
- Set-ExecutionPolicy:设置 PowerShell 脚本执行策略。
- -Scope CurrentUser:只修改当前 Windows 用户,不影响其他用户。
- RemoteSigned:允许本机脚本运行,对网络下载的脚本保留安全检查。
PowerShell脚本执行权限通常只需为当前Windows用户设置一次。
5. 激活虚拟环境
执行:
.\.venv\Scripts\Activate.ps1
成功后,提示符通常会变为:(.venv) PS E:\libraries\graphmap\demo1>
检查虚拟环境是否真的生效:
$env:VIRTUAL_ENV
正常输出:E:\libraries\graphmap\demo1\.venv
再检查当前 Python 路径:
python -c "import sys; print(sys.executable)"
- -c:直接运行后面的 Python 代码。
正常应显示:E:\libraries\graphmap\demo1\.venv\Scripts\python.exe
即使前面没有显示 (.venv),只要这里显示 .venv\Scripts\python.exe,虚拟环境就是生效的。
6. 升级pip
执行:
python -m pip install --upgrade pip
- 使用虚拟环境里的 Python。
- 更新当前虚拟环境中的 pip。
- 通常在新建虚拟环境、pip版本较旧或安装第三方库报错时执行一次。
7. 安装 Python 库
执行:
python -m pip install neo4j python-dotenv
- neo4j:Python连接Neo4j数据库的官方驱动。
- python-dotenv:从 .env 文件读取数据库地址、用户名和密码,避免把密码直接写进 Python 代码。
检查安装结果:
python -m pip show neo4j
python -m pip show python-dotenv
查看当前环境安装了哪些库:
python -m pip list
8. 使用 VS Code 打开项目
在当前 PowerShell 中执行:
code .
- code:启动 VS Code。
- .:打开当前文件夹,也就是 demo1。
如果提示找不到 code,手动打开 VS Code,然后选择:
→ 文件
→ 打开文件夹
→ E:\libraries\graphmap\demo1
打开任意一个.py文件,观察工程右下角是否使用当前虚拟环境的python。

否则,在确保下载并启用python扩展后,
在 VS Code 中按:Ctrl + Shift + P
搜索:Python: Select Interpreter
选择:Python 解释器
选择:E:\libraries\graphmap\demo1\.venv\Scripts\python.exe
这一步确保 VS Code 使用当前项目的虚拟环境。
二. 创建和测试 Neo4j 数据库实例
1. 创建 Neo4j 实例
打开 Neo4j Desktop 2.2.1,点击: Create instance
填写:
实例名称:demo1
数据库版本:选择最高的 5.26.x LTS
用户名:neo4j
密码:自己设置,例如 Neo4j_demo1_12
- 官方文档目前明确区分:2026.06 是当前功能版本,5.26 是 LTS 版本
- 5.26 是官方长期支持版本 LTS,持续接收关键缺陷和安全修复。
- 5.26.x 是当前的 5.26 补丁版本。
- Neo4j Desktop 创建的 Instance 本质上是一个本地 Neo4j DBMS(数据库管理系统)。结合【八. 总结】去理解
- Desktop 2.2 可以管理 Neo4j 5.1 及以上版本,并会管理数据库运行所需的 Java JDK,因此不需要另外安装 JDK。
- 新实例会自动包含默认的neo4j数据库和用于系统管理的system数据库。
例如 你现在的环境
Neo4j Desktop └── demo1 实例 └── Neo4j DBMS 5.26.19 ├── neo4j 数据库 └── system 数据库
- Neo4j Desktop:负责创建、启动、停止和管理实例。
- demo1:你给这个本地实例起的名字。
- Neo4j DBMS 5.26.19:真正运行数据库的核心程序。
- neo4j:默认用来存放节点、关系和属性的数据库。
- system:用于管理用户、权限和数据库状态的系统数据库。
2. 启动实例
demo1实例已经创建并成功启用,右上角显示:RUNNING
当前这个紫色弹窗是在提示安装 APOC 插件。现在先不用安装 APOC。
点击紫色提示框右上角的×,关闭提示。
3. 在 Query 中连接实例
确保实例启用后, 打开 Query
点击左上角:No instance connected
在列表中选择 demo1 ,点击 Connect 。
连接成功后,左上角应变成类似:demo1, Database: neo4j, User: neo4j
Query,是用来向 Neo4j 数据库发送查询命令的图形化工具。
4. 执行 Cypher 测试语句
点击最上方带 neo4j$ 的输入框,输入:RETURN "Neo4j运行成功" AS message;
并运行,即点击输入框最右侧的蓝色三角形运行按钮。
显示如下结果,说明:

- Query 已连接到 neo4j 数据库
- Cypher 查询可以正常执行
- 数据库可以返回结果
在 Query 中输入的语言叫:Cypher,是 Neo4j 用于操作图数据库的查询语言。
三. 创建项目文件和配置文件
1. 创建项目文件结构
查看 VS Code 左侧文件区域,当前存在文件:
DEMO1
├── .venv
├── include
├── Lib
├── Scripts
└── pyvenv.cfg
创建以下文件:
demo1
├── .venv 文件夹
├── data 文件夹
│ └── triples.csv 文件
├── .env 文件
├── .gitignore 文件
├── test_connection.py 文件
└── import_kg.py 文件
- data\triples.csv : 保存知识图谱三元组
- .env : 保存 Neo4j 的连接地址、用户名和密码
- .gitignore:告诉 Git 不要上传虚拟环境、密码和 Python 缓存
- test_connection.py : 测试 Python 是否能连接Neo4j
- import_kg.py : 读取 CSV 三元组并导入 Neo4j
2. 配置 .env
向 .env 文件写入:
NEO4J_URI=neo4j://localhost:7687
NEO4J_USERNAME=neo4j
NEO4J_PASSWORD=Neo4j_demo1_12
NEO4J_DATABASE=neo4j
注意把:Neo4j_demo1_12 替换成你在 Desktop 中设置的真实密码。
- NEO4J_URI : Neo4j 的连接地址,7687 是 Bolt 连接端口
- NEO4J_USERNAME :数据库用户名,本地实例默认一般为 neo4j
- NEO4J_PASSWORD : 创建实例时设置的密码。
- NEO4J_DATABASE :需要操作的数据库,默认数据库名通常是 neo4j
3. 配置 .gitignore
向 .gitignore 文件写入:
.venv/
.env
__pycache__/
*.pyc
- .venv/:以后使用 Git 时不上传虚拟环境。
- .env:不上传数据库密码。
- __pycache__/:不上传 Python 缓存。
- *.pyc:不上传 Python 编译缓存文件。
四. 测试 Python 连接 Neo4j
1. 编写 test_connection.py
向 test_connection.py 写入:
import os
from pathlib import Path
from dotenv import load_dotenv
from neo4j import GraphDatabase
# 当前项目根目录
PROJECT_DIR = Path(__file__).resolve().parent
# 加载项目目录中的 .env 文件
load_dotenv(PROJECT_DIR / ".env")
# 从 .env 中读取数据库配置
uri = os.environ["NEO4J_URI"]
username = os.environ["NEO4J_USERNAME"]
password = os.environ["NEO4J_PASSWORD"]
def main():
# 创建 Neo4j 驱动
with GraphDatabase.driver(
uri,
auth=(username, password),
) as driver:
# 立即检查数据库地址和账号密码是否正确
driver.verify_connectivity()
print("Neo4j连接成功")
if __name__ == "__main__":
main()
2. 运行连接测试
先确保 Neo4j Desktop 中的实例已经启动。
在 PowerShell 中执行:
Set-Location "E:\libraries\graphmap\demo1"
.\.venv\Scripts\Activate.ps1
运行程序:
python .\test_connection.py
正常输出:Neo4j连接成功
如果提示:AuthenticationError
通常是用户名或密码错误,检查 .env。
如果提示:ServiceUnavailable
通常是 Neo4j Desktop 中的实例没有启动,或者连接地址错误。
五. 导入知识图谱三元组
1. 编写三元组 CSV 文件
向 data\triples.csv 文件写入:
head,head_type,relation,tail,tail_type
无人机,设备,使用,PX4,软件
无人机,设备,搭载,相机,传感器
无人机,设备,搭载,飞控,设备
PX4,软件,运行于,飞控,设备
相机,传感器,采集,图像,数据
YOLO,算法,处理,图像,数据
YOLO,算法,输出,目标检测结果,数据
目标检测结果,数据,用于,目标跟踪,任务
目标跟踪,任务,输出,目标位置,数据
MAVROS,软件,连接,PX4,软件
ROS,软件,包含,MAVROS,软件
第一行是字段名
- head :头实体
- head_type :头实体的类别
- relation :两个实体之间的关系
- tail :尾实体
- tail_type:尾实体的类别
例如:
无人机,设备,使用,PX4,软件
表示:无人机 --使用--> PX4
2. 编写 import_kg.py
向 import_kg.py 写入:
import csv
import os
from pathlib import Path
from dotenv import load_dotenv
from neo4j import GraphDatabase
# 项目根目录
PROJECT_DIR = Path(__file__).resolve().parent
# 三元组CSV文件路径
CSV_PATH = PROJECT_DIR / "data" / "triples.csv"
# 加载数据库配置
load_dotenv(PROJECT_DIR / ".env")
URI = os.environ["NEO4J_URI"]
USERNAME = os.environ["NEO4J_USERNAME"]
PASSWORD = os.environ["NEO4J_PASSWORD"]
DATABASE = os.getenv("NEO4J_DATABASE", "neo4j")
def read_triples():
"""读取CSV中的三元组数据。"""
if not CSV_PATH.exists():
raise FileNotFoundError(f"找不到CSV文件:{CSV_PATH}")
with CSV_PATH.open(
mode="r",
encoding="utf-8-sig",
newline="",
) as file:
reader = csv.DictReader(file)
rows = list(reader)
if not rows:
raise ValueError("CSV文件中没有三元组数据")
return rows
def import_triples(driver, rows):
"""把实体和关系批量写入Neo4j。"""
query = """
UNWIND $rows AS row
MERGE (head:Entity {name: row.head})
SET head.type = row.head_type
MERGE (tail:Entity {name: row.tail})
SET tail.type = row.tail_type
MERGE (head)-[
relation:RELATION {name: row.relation}
]->(tail)
"""
with driver.session(database=DATABASE) as session:
session.run(query, rows=rows).consume()
def main():
rows = read_triples()
with GraphDatabase.driver(
URI,
auth=(USERNAME, PASSWORD),
) as driver:
driver.verify_connectivity()
import_triples(driver, rows)
print(f"导入完成,共导入 {len(rows)} 条三元组")
if __name__ == "__main__":
main()
3. 运行导入程序
先确保 Neo4j Desktop 实例正在运行。
在PowerShell中执行:
Set-Location "E:\libraries\graphmap\demo1"
.\.venv\Scripts\Activate.ps1
python .\import_kg.py
正常输出:导入完成,共导入 11 条三元组
六. 在 Neo4j 中查询和查看知识图谱
- 查看全部节点和关系
打开 Neo4j Desktop 中的 Query,在输入框 neo4j$ 里执行:
MATCH p = ()-[]->()
RETURN p;
- MATCH:匹配数据库中的图结构。
- p:给整条路径起名。
- ():任意节点。
- -[]->:任意有方向的关系。
- RETURN p:返回完整路径并显示为关系图。
- 以表格形式查看所有三元组
MATCH (head:Entity)-[relation:RELATION]->(tail:Entity)
RETURN
head.name AS 头实体,
relation.name AS 关系,
tail.name AS 尾实体;
- 查询与无人机直接相关的节点
MATCH p = (uav:Entity {name: "无人机"})-[]-(other)
RETURN p;
- 查询无人机两层以内的关系
MATCH p = (uav:Entity {name: "无人机"})-[*1..2]-(other)
RETURN p;
- 删除当前数据库全部节点与关系
MATCH (n)
DETACH DELETE n;
七. 每次重新打开项目的操作流程
- 启用实例,打开Query
- 打开 PowerShell,执行:
Set-Location "E:\libraries\graphmap\demo1"
.\.venv\Scripts\Activate.ps1
code .
python .\test_connection.py
python .\import_kg.py
- 退出虚拟环境
deactivate
- 退出当前项目的 Python 虚拟环境。
- 不会删除 .venv,下次仍然可以继续激活。
八. 修改文件
各文件是否需要修改 :
| 文件 | 一般是否修改 | 需要修改的情况 |
|---|---|---|
| data\triples.csv | 需要 | 更换知识图谱内容 |
| .env | 可能需要 | 更换地址、用户名、密码或数据库名称 |
| .gitignore | 通常不需要 | 需要增加新的忽略文件 |
| test_connection.py | 通常不需要 | .env 中连接配置项的名称发生变化,或程序不再从 .env 读取配置 |
| import_kg.py | 可能需要 | CSV字段、节点标签和关系类型发生变化 |
其中:
-
CSV 字段发生变化
head,head_type,relation,tail,tail_type
改成head,head_type,relation,tail,tail_type,source,confidence -
改成具体节点标签
(:Entity {type: "设备"})
改成:(:Device) -
改成具体关系类型
[:RELATION {name: "使用"}]
改成:[:USES]
注意旧数据
如果你直接修改 CSV,再次运行:python .\import_kg.py
新数据会导入当前数据库,但旧数据不会自动删除。
结果可能变成:
原无人机知识图谱
+
新学校知识图谱
三种处理方法
- 每个项目创建一个独立 Neo4j 实例
- 清空当前数据库后重新导入
在 Neo4j Query 中执行:
MATCH (n)
DETACH DELETE n;
运行python .\import_kg.py
注意:该命令会删除当前数据库中的全部节点和关系。
- 在同一个实例中使用不同数据库
修改 .env:
NEO4J_DATABASE=schoolkg
前提是当前 Neo4j 版本和授权支持创建多个用户数据库。
总结:
- 在 demo1 实例下,通过 .env 指定把哪个 CSV 导入哪个数据库。
- Neo4j 的一个实例可以管理多个数据库,且相互独立。
更多推荐



所有评论(0)