当前位置: 首页 > news >正文

图数据库neo4j desktop2.0初探

最近有一些时间,想尝试下图数据库,看图数据库如何与人工智能相关结合,提供更高质量的语料,与提示词看如何结合,这个其中的第一步。
1、首先还是安装,我这里选择了neo4j,版本为neo4j的desktop,2.0.1。
这个使用中要用power shell,操作系统版本不能太低。
在这里插入图片描述
下载地址是这里:
https://neo4j.ac.cn/deployment-center/?desktop-gdb
具体地址:
https://neo4j.com/artifact.php?name=neo4j-desktop-offline-2.0.1-setup.exe
新版本不太好下,我下的是2.0.1
在这里插入图片描述

这里下载打开后,要用迅雷下载,不然不太好下。下载好后,安装很简单,能干预的很少,就不说了。
2、打开界面后,创建一个neo4j的实例:

在这里插入图片描述
在这里插入图片描述
创建完后,就行了,注意这个密码不要忘了,当然忘了也可以重置。
3、写代码,开干。
我用的是neo4j这个扩展。

pip install neo4j -i https://mirrors.ustc.edu.cn/pypi/web/simple/

4、具体代码:

# -*- coding: utf-8 -*-
from neo4j import GraphDatabase
import os
import sys
print("开始执行...")
print(sys.stdout.encoding)# 连接参数
uri = "bolt://localhost:7687"
user = "neo4j"
password = "123123123"def create_node(driver, label, properties_list, show_progress=True):"""创建节点,如果节点已存在则不重复创建参数:driver: Neo4j驱动实例label: 节点标签properties_list: 节点属性列表show_progress: 是否显示进度信息返回:创建或找到的节点列表"""nodes = []with driver.session() as session:for properties in properties_list:# 检查节点是否已存在check_query = f"MATCH (n:{label} {{name: $name}}) RETURN n"result = session.run(check_query, name=properties['name']).single()if result is None:# 创建新节点create_query = f"CREATE (n:{label} $props) RETURN n"node = session.run(create_query, props=properties).single()nodes.append(node['n'])else:# 使用已存在的节点nodes.append(result['n'])if show_progress:print(f"节点{label}处理完成。")return nodesdef create_relationship(driver, start_node, end_node, relationship_type, show_progress=True):"""创建关系,如果关系已存在则不重复创建参数:driver: Neo4j驱动实例start_node: 起始节点end_node: 结束节点relationship_type: 关系类型show_progress: 是否显示进度信息返回:布尔值,表示操作是否成功"""if start_node and end_node:with driver.session() as session:# 检查关系是否已存在check_query = """MATCH (a {name: $start_name})-[r:%s]->(b {name: $end_name})RETURN count(r) as count""" % relationship_typeresult = session.run(check_query, start_name=start_node['name'], end_name=end_node['name']).single()if result['count'] > 0:if show_progress:print(f"关系{start_node['name']}-[:{relationship_type}]->{end_node['name']}已存在,不创建新关系。")return True# 创建新关系create_query = """MATCH (a {name: $start_name}), (b {name: $end_name})CREATE (a)-[:%s]->(b)RETURN a, b""" % relationship_typesession.run(create_query, start_name=start_node['name'], end_name=end_node['name'])if show_progress:print(f"关系{start_node['name']}和{end_node['name']}已创建。")return Trueelse:if show_progress:print(f"创建关系失败,{start_node['name'] if start_node else '节点'}或{end_node['name'] if end_node else '节点'}不存在。")return Falsedef query_relationship(driver, start_node, end_node, relationship_type):"""查询指定的关系参数:driver: Neo4j驱动实例start_node: 起始节点end_node: 结束节点relationship_type: 关系类型返回:查询结果"""if start_node and end_node:with driver.session() as session:query = """MATCH (a {name: $start_name})-[r:%s]->(b {name: $end_name})RETURN a, r, b""" % relationship_typeresults = session.run(query, start_name=start_node['name'], end_name=end_node['name'])found = Falsefor record in results:found = Trueprint(record["a"]["name"], "knows", record["b"]["name"])if not found:print(f"未找到{start_node['name']}和{end_node['name']}之间的{relationship_type}关系。")# 重新执行查询以返回结果集return session.run(query, start_name=start_node['name'], end_name=end_node['name'])# 主程序
if __name__ == "__main__":driver = Nonetry:# 连接数据库driver = GraphDatabase.driver(uri, auth=(user, password))print("成功连接到Neo4j数据库!")# 创建节点alice = create_node(driver, "Person", [{"name": "Alice"}])bob = create_node(driver, "Person", [{"name": "Bob"}])# 创建关系(测试重复创建)create_relationship(driver, alice[0], bob[0], "KNOWS")create_relationship(driver, alice[0], bob[0], "KNOWS")  # 尝试重复创建,应该被检测到# 查询关系print("\n查询关系结果:")results = query_relationship(driver, alice[0], bob[0], "KNOWS")print("\n操作完成!")except Exception as e:print(f"发生错误:{e}")finally:# 确保关闭驱动连接if driver:driver.close()print("数据库连接已关闭。")

5、常用的neo4j的命令:

删除节点关系,类型为KNOWS

MATCH (a)-[r:KNOWS]->(b)

删除节点关系,类型为KNOWS

MATCH (a)-[r:KNOWS]->(b)
DELETE r

删除节点,类型为Person

MATCH (n:Person)
DELETE n

删除所有节点:

MATCH (n)
DELETE n

查询所有节点,类型为Person,返回节点的name属性,以及节点的id属性,限制返回25条记录

MATCH (n:Person) RETURN n.name, n.id LIMIT 25;

创建节点,类型为Person,属性为name和id

CREATE (n:Person {name: "张三", id: 123456})

创建关系,类型为KNOWS,关系两端的节点为n1和n2

MATCH (n1:Person {name: "张三"}), (n2:Person {name: "Bob"})
CREATE (n1)-[:KNOWS]->(n2)

删除关系,通过指定关系类型和关系id

MATCH ()-[r:KNOWS]->()
WHERE r.id = 123456
DELETE r

查看所有关系的id

MATCH ()-[r:KNOWS]-() RETURN r,elementId(r) limit 1;

通过关系的ID的查询关系

MATCH ()-[r:KNOWS]->()
WHERE elementId(r) = '5:5ed65e88-85a1-43cb-9932-77b78a4c8ec8:1157425104234217504' return r ;

通过关系的ID删除关系

MATCH ()-[r:KNOWS]->()
WHERE elementId(r) = '5:5ed65e88-85a1-43cb-9932-77b78a4c8ec8:1157425104234217504'
DELETE r

6、乱码问题:
哪里都不避开这个乱码问题。。。

win11中,执行如果乱码,一定检查控制面板中,是否启用了utf-8的支持,位置:控制面板-区域-管理-更改系统区域设置-勾选:Beta版:使用Unicode UTF-8提供全球语言支持

在这里插入图片描述
代码中:
第一行别忘了:

# -*- coding: utf-8 -*-

具体vscode中的扩展啥的也都不说了。。。

http://www.dtcms.com/a/465825.html

相关文章:

  • 广州网站建设网络推广公司酒店旅游团购网站建设
  • 重庆镇海seo整站优化价格紫色个人网站模板
  • 有安全好用且稳定的共享网盘吗?
  • 网站空间是不是服务器南宁网站建设怎样建立一个好网站
  • 网站建设系统认证系统为什么建设银行的网站打不开
  • 并行传输如何重塑数据交换新格局
  • Maven用户设置文件(settings.xml)配置指南
  • 闪电卫士:弧光保护装置以毫秒速度守护电力安全
  • 免费搭建网站注册网站什么要求
  • CCF-GESP 等级考试 2025年9月认证C++三级真题解析
  • Wireshark 过滤器命令大汇总:从入门到精通
  • 网站软件免费下载wordpress 插件漏洞
  • 【Java数据结构】HashMap 的深入解析与优化实践
  • 免费网站个人注册网页设计教程与实训
  • 仿搜狐视频网站源码品牌营销策划方案报价
  • MySQLEXPLAIN命令详解从执行计划读懂SQL性能瓶颈
  • 【FastAPI】学习笔记
  • 商丘网站制作电话企业网站 三合一
  • 海东高端网站建设大连网页
  • 数据科学与回归模型相关试卷
  • 深度学习之YOLO系列YOLOv1
  • 生成式 AI 冲击下,网络安全如何破局?
  • 网站建设的3个基本原则做网站需要多少
  • 免费的作文网站cloudfare wordpress
  • 开源 java android app 开发(十八)最新编译器Android Studio 2025.1.3.7
  • 网络模型训练完整代码
  • 部署k8s集群+containerd+dashboard
  • PHP网站建设的课后笔记wordpress divi主题
  • 网站开发相关文献广州 深圳 外贸网站建设公司
  • 从零起步学习Redis || 第十二章:Redis Cluster集群如何解决Redis单机模式的性能瓶颈及高可用分布式部署方案详解