如何用Python在Neo4j Browser中上传CSV批量构建图并查询信息?
用Python批量导入CSV到Neo4j并查询信息
一、前置准备
- 安装Neo4j Python驱动:
pip install neo4j - 将你的CSV文件放到Neo4j安装目录下的
import文件夹(默认路径:neo4j-xxx/data/import),这样可以直接通过file:///协议访问。如果需要自定义路径,需修改Neo4j配置文件neo4j.conf中的dbms.security.allow_csv_import_from_file_urls=true,并添加允许的路径。
二、Python实现批量导入
使用Neo4j的LOAD CSV语句配合Python驱动执行批量导入,这比逐个创建节点/关系高效得多,适合大型图数据。
代码示例
假设你的CSV文件(graph_data.csv)结构如下:
source_id,source_name,target_id,target_name,relationship_weight 1,Alice,2,Bob,0.8 2,Bob,3,Charlie,0.5
Python代码:
from neo4j import GraphDatabase # 数据库连接信息,根据你的Neo4j配置修改 URI = "bolt://localhost:7687" USERNAME = "neo4j" PASSWORD = "your_database_password" def batch_import_csv(): # 初始化驱动并创建会话 with GraphDatabase.driver(URI, auth=(USERNAME, PASSWORD)) as driver: with driver.session() as session: # 批量导入的Cypher语句,MERGE避免重复创建节点/关系 import_query = """ LOAD CSV WITH HEADERS FROM 'file:///graph_data.csv' AS row MERGE (source:User {id: row.source_id, name: row.source_name}) MERGE (target:User {id: row.target_id, name: row.target_name}) MERGE (source)-[r:FOLLOWS {weight: toFloat(row.relationship_weight)}]->(target) """ # 执行查询并获取统计结果 result = session.run(import_query) counters = result.consume().counters print(f"导入完成:创建节点 {counters.nodes_created} 个,创建关系 {counters.relationships_created} 条") if __name__ == "__main__": batch_import_csv()
三、Neo4j Browser中的操作说明
你不需要找专门的"添加图"按钮,直接在Browser的查询框中执行上述LOAD CSV语句即可完成导入。导入后,可执行Cypher查询提取信息:
常用查询示例
# 查询前10个节点及其属性 MATCH (n) RETURN n LIMIT 10 # 查询特定节点的所有关联关系 MATCH (u:User {name: 'Alice'})-[r]->(friend) RETURN u, r, friend # 统计所有关系数量 MATCH ()-[r]->() RETURN COUNT(r) AS total_relationships
四、大型图数据的优化建议
如果你的数据量极大(百万级以上节点/关系),推荐使用Neo4j官方的neo4j-admin import工具,这是离线导入工具,速度远快于LOAD CSV。使用方式如下(命令行执行):
neo4j-admin import --nodes import/nodes.csv --relationships import/relationships.csv
注意:使用该工具需要先停止Neo4j服务,且CSV格式需符合官方要求(节点和关系分开存储)。
内容的提问来源于stack exchange,提问作者user20505088
相关产品推荐
相关产品推荐

