neo4j图形数据库

一、下载

二、安装

1.需要配置java环境

2.配置neo4j系统变量  NEO4J_HOME -> C:\neo4j\neo4j-community-3.5.12

3.配置neo4j环境变量 Path中添加%NEO4J_HOME%\bin

4.验证是否安装成功

C:\Users\daiszhan>neo4j.bat console2019-11-07 03:08:25.943+0000 INFO ======== Neo4j 3.5.12 ========

2019-11-07 03:08:25.991+0000INFO Starting...2019-11-07 03:08:30.949+0000 INFO Bolt enabled on 127.0.0.1:7687.2019-11-07 03:08:33.013+0000INFO Started.2019-11-07 03:08:34.157+0000 INFO Remote interface available at http://localhost:7474/

5.通过访问http://localhost:7474   默认跳转到  http://localhost:7474/browser

默认用户名和密码为:neo4j,需要改自己的密码eagleeye

6.注册neo4j服务 C:\Users\daiszhan>neo4j install-service

三、开启服务

1.开启neo4j服务 C:\Users\daiszhan>neo4j start

2.关闭neo4j服务 C:\Users\daiszhan>neo4j stop

3.重启neo4j服务 C:\Users\daiszhan>neo4j restart

5.查看neo4j状态 C:\Users\daiszhan>neo4j status

四、安装python包

pip install py2neo

五、使用py2neo

1.添加节点

from py2neo importNode, Relationship, Graph, NodeMatcher, RelationshipMatcher## 新建图形

graph = Graph('http://localhost:7474', username='neo4j', password='eagleeye')## 新建节点

a = Node('label', name='a', id='0001', age=65, location='dalian') #第一个参数是类别,第二个参数是名字,可以有很多个参数名字

b = Node('label', name = 'b')

## 给节点添加/修改属性

a['age'] = 20## 绘制节点

graph.create(a)

graph.create(b)## 新建关系

r1 = Relationship(a, 'to', b, protocol = 'tcp') #a是开始节点,b是终止起点,to是二者关系类型,protocol是其他属性,可以有很多个其他属性

graph.create(r1)

## 给关系添加修改属性

r1['state'] = 'up'

## 输出节点, 关系

print(a)

(a:label {name='a',id='0001',age=65,lacation='dalian'})

print(r1)

(a)-[:to {protocol:"tcp"}]->(b)

## 对属性进行批量更新

data={age:21,location:'shanghai'}

a.update(data)

2.对节点的操作

## 新建图形

graph = Graph('http://localhost:7474', username='neo4j', password='eagleeye')## 新建节点

a = Node('label', name='a', id='0001', age=65, location='dalian')#返回节点的ID的哈希值

hash(a)#返回节点属性,没有就返回None

a[age]#设定节点属性值

a['type'] = 'ccc'

#删除节点属性,没有会报KeyError

del a['location']#返回节点属性的数量

len(a)#返回节点所有属性

dict(a)#返回一个生成器且只包含一个节点

walk(a)#返回节点的标签的集合

labels()#判断是否有这个标签

a.has_label(location)#给节点添加标签

a.add_label(test)#删除节点标签

a.remove_label(test)#清除所有标签

a.clear_labels()#添加多个标签

a.update_labels([test,test1])

3.对连接的操作

r1 = Relationship(a, 'to', b, protocol = 'tcp') #a是开始节点,b是终止起点,to是二者关系类型,protocol是其他属性,可以有很多个其他属性

graph.create(r1)#返回关系的hash值

hash(r1)#返回关系的属性值

r1['state']#设定关系的属性值

r1['state']='up'

#删除关系的属性值

del r1['state']#返回关系的属性值数目

len(r1)#以字典形式返回关系的所有属性

dict(r1)#返回一个生成器包含起始节点,关系,终止节点

walk(r1)#返回关系类型

r1.type()

4.子图

from py2neo importNode, Relationship

a= Node('Person', name='Alice')

b= Node('Person', name='Bob')

r= Relationship(a, 'KNOWS', b)

s= a | b |rprint(s)>>> ({(alice:Person {name:"Alice"}), (bob:Person {name:"Bob"})}, {(alice)-[:KNOWS]->(bob)})#获取所有的节点

s.nodes()#获取所有的关系

s.relationships()#取交集

s1=a|b|r

s2=a|bprint(s1&s2)>>> ({(alice:Person {name:"Alice"}), (bob:Person {name:"Bob"})}, {})print(s.keys())>>> frozenset({'name'})print(s.labels())>>> frozenset({'Person'})print(s.nodes())>>>frozenset({(alice:Person {name:"Alice"}), (bob:Person >>> >>> >>> {name:"Bob"})})print(s.relationships())>>> frozenset({(alice)-[:KNOWS]->(bob)})print(s.types())>>> frozenset({'KNOWS'})print(order(s))>>> 2

print(size(s))>>> 1

#子图拥有的属性

subgraph | other |… 子图的并

subgraph& other &… 子图的交

subgraph- other -… 子图的差

subgraph^ other ^… 子图对称差

subgraph.keys() 返回子图节点和关系所有属性的集合

subgraph.labels() 返回节点label的集合

subgraph.nodes() 返回所有节点的集合

subgraph.relationships() 返回所有关系的集合

subgraph.types() 返回所有关系的type的集合

order(subgraph) 返回子图节点的数目

size(subgraph) 返回子图关系的数目

5.遍历

from py2neo importNode, Relationship

a= Node('Person', name='Alice')

b= Node('Person', name='Bob')

c= Node('Person', name='Mike')

ab= Relationship(a, "KNOWS", b)

ac= Relationship(a, "KNOWS", c)

w= ab + Relationship(b, "LIKES", c) +acprint(w)>>> (alice)-[:KNOWS]->(bob)-[:LIKES]->(mike)

from py2neo importwalkfor item inwalk(w):print(item)#从 a 这个 Node 开始遍历,然后到 b,再到 c,最后重新回到 a

>>>(alice:Person {name:"Alice"})

(alice)-[:KNOWS]->(bob)

(bob:Person {name:"Bob"})

(bob)-[:LIKES]->(mike)

(mike:Person {name:"Mike"})

(alice)-[:KNOWS]->(mike)

(alice:Person {name:"Alice"})print(w.start_node()) #获取起始节点

>>> (alice:Person {name:"Alice"})print(w.end_node()) #获取终止节点

>>> (alice:Person {name:"Alice"})print(w.nodes()) #所有节点的元祖

>>> ((alice:Person {name:"Alice"}), (bob:Person {name:"Bob"}), (mike:Person {name:"Mike"}), (alice:Person {name:"Alice"}))print(w.relationships()) #所有关系的元祖

>>> ((alice)-[:KNOWS]->(bob), (bob)-[:LIKES]->(mike), (alice)-[:KNOWS]->(mike))

6.查询

6.1 传统方式

graph =Graph()#其中的数字对应的是节点,ID#这个ID不按顺序来的,要注意

graph.nodes[1234]

graph.nodes.get(1234)

6.2 match方式

test_graph.data("MATCH (a:Person {name:'You'}) RETURN a")>>> [{'a': (c7d1cb9:Person {name:"You"})}]

list(test_graph.run("MATCH (a:Person {name:'You'}) RETURN a"))>>>[('a': (c7d1cb9:Person {name:"You"}))]

test_graph.run("MATCH (a:Person {name:'You'}) RETURN a").data()>>>[{'a': (c7d1cb9:Person {name:"You"})}]#查询关系

test_graph.run("MATCH (a:Person {name:'You'})-[b:FRIEND]->(c:Person {name:'Johan'} ) RETURN a,b,c")#graph查询

graph.run("MATCH (n:leafCategory) RETURN n LIMIT 25").data() #list型

graph.run("MATCH (n:leafCategory) RETURN n LIMIT 25").to_data_frame() #dataframe型

graph.run("MATCH (n:leafCategory) RETURN n LIMIT 25").to_table() #table

6.3 find方式

#节点个数

len(graph.nodes)

len(graph.nodes.match("leafCategory")) #某类别的节点个数

#查找全部, 可根据label、property_key、property_value、limit查找

graph=test_graph.find(label='Person')for node ingraph:print(node)>>>(b54ad74:Person {age:18,name:"Johan"})

(b1d7b9d:Person {name:"Rajesh"})

(cf7fe65:Person {name:"Anna"})

(d780197:Person {name:"Julia"})#查找单节点, 可根据label、property_key、property_value查找

test_graph.find_one(label='Person',property_key='name',property_value='You')>>> (c7d1cb9:Person {name:"You"})#该节点是否存在

test_graph.exists(graph.nodes[1234])

6.4 NodeMatcher方式(py2neoV4适用)

test_graph = Graph(password='123456')

selector=NodeMatcher(test_graph)#selector = NodeSelector(test_graph) 适用py2neoV3

list(selector.select("Person", name="Anna"))#筛选 age 为 21 的 Person Node

list(selector.select("Person").where("_.name =~ 'J.*'", "1960 <= _.born < 1970"))#排序功能

persons = list(selector.select('Person').order_by('_.age'))#主要方法

first()返回单个节点

limit(amount)返回底部节点的限值条数

skip(amount)返回顶部节点的限值条数

order_by(*fields)排序

where(*conditions, **properties)筛选条件

6.5 match()或match_one()

for rel in test_graph.match(start_node=node3, rel_type="FRIEND"):print(rel.end_node()["name"])>>>Johan

Julia

Andrew#match_one

test_graph.match_one(start_node=node3, rel_type="FRIEND")>>> (c7d1cb9)-[:FRIEND]->(b54ad74)

7.更新

## push的用法

node = test_graph.find_one(label='Person')

node['age'] = 18test_graph.push(node)print(test_graph.find_one(label='Person'))>>> (b54ad74:Person {age:18,name:"Johan"})## update() 方法## setdefault()方法## 直接赋值法,会覆盖原有的

8.删除

delete(subgraph) 删除节点、关系或子图

delete_all() 删除数据库所有的节点和关系from py2neo importGraph

graph= Graph(password='123456')

node= graph.find_one(label='Person')

relationship= graph.match_one(rel_type='KNOWS')

graph.delete(relationship)

graph.delete(node)#在删除 Node 时必须先删除其对应的 Relationship,否则无法删除 Node。

neo4j 登录认证_neo4j相关推荐

  1. 基于jwt的用户登录认证

    最近在app的开发过程中,做了一个基于token的用户登录认证,使用vue+node+mongoDB进行的开发,前来总结一下. token认证流程: 1:用户输入用户名和密码,进行登录操作,发送登录信 ...

  2. mod_authn_dbd和mysql_使用Apache的mod_authn_dbd和PostgreSQL实施HTTP Basic登录认证

    [STEP1] 使用PostgreSQL的客户端pgAdmin登录数据库,做成用户认证表.字段名和表名任意,如 1 CREATETABLEusrinfo2 (3 useridcharactervary ...

  3. Java 实现 SSH 协议的客户端登录认证方式

    摘自:http://blog.sae.sina.com.cn/archives/333/comment-page-1#comment-37391 简介: 本文首先对 SSH 协议的基础知识作以介绍,然 ...

  4. MySQL通讯协议研究2(登录认证)

    今天看登录认证,需要指出的是MySQL支持多种登录方式,而且支持SSL,我们只看最简单的,基础流程如下: Client Server| handshake ||<---------------- ...

  5. 用Discuz/UCenter账号实现Wifi登录认证

    如果你有一个用Discuz/UCenter构建的网站,还有自己的Wifi基站或热点,那你可以用Wiwiz为你的Wifi热点做一个入口登录页面.当 wifi终端用户连到你的热点时,打开任何网页都会先显示 ...

  6. Asp.Net MVC3.0网站统计登录认证的在线人数

    前言 对于一个网站来说,统计在线人数是一个很重要的工作.平时也发现很多的网站论坛等都有在线人数的显示.对于一个网站如果在线人数很多,用户看到了这么个数字也是很了不起的事情.由于之前对于这个知识点只是知 ...

  7. Shell批量SSH免交互登录认证

    脚本实现功能:批量或单个SSH免交互登录认证 脚本应用场景:当部署集群时,大多数实现要配置好管理节点与从节点的SSH免交互登录,针对这样的情况,写了下面脚本,简化工作. 脚本支持系统:Ubuntu和C ...

  8. Ajax跨域请求action方法,无法传递及接收cookie信息(应用于系统登录认证及退出)解决方案

    Ajax跨域请求action方法,无法传递及接收cookie信息(应用于系统登录认证及退出)解决方案 参考文章: (1)Ajax跨域请求action方法,无法传递及接收cookie信息(应用于系统登录 ...

  9. 自定义request_Spring Security 自定义登录认证(二)

    一.前言 本篇文章将讲述Spring Security自定义登录认证校验用户名.密码,自定义密码加密方式,以及在前后端分离的情况下认证失败或成功处理返回json格式数据 温馨小提示:Spring Se ...

最新文章

  1. 基于SSH的在线音乐点评网站-java在线音乐点评网站
  2. python的__init__几种方法总结【转载】
  3. 1063. Set Similarity (25)
  4. 干货:如何正确描述存储IO类型?
  5. 清明出游,在高速上堵了16个小时。
  6. 在RH6.5上安装sublime3 build3103步骤
  7. Day 41 Rsync备份
  8. 单webview上拉刷新下拉加载
  9. R工程化—Rest API 之plumber包
  10. 24. flock() 函数
  11. RPM软件包管理(安装、卸载、查询、制作)
  12. android个人日记本论文,手机app移动开发论文-个人心情日记本的设计实现 毕设论文.doc...
  13. ROS--基于机器人操作系统设计与实现
  14. 微信小程序新手向——界面布局
  15. 期权定价模型之Heston模型--参数校准与定价【附python代码】
  16. 老毛桃U盘启动,装Linux
  17. Azure SQL 数据库仓库Data Warehouse (3) DWU
  18. 设置word表格行高
  19. 二进制输入记录(bi)
  20. 谷歌工程师薪资有多少 羡慕嫉妒恨

热门文章

  1. 每周学一点 egret(4) EUI
  2. 第65篇:探索顶级APT后门Sunburst的设计思路(Solarwinds供应链攻击中篇)
  3. Elasticsearch 简介 1
  4. LightDB13.3-22.1数据库安装
  5. idea 缺失右侧maven窗口
  6. vue父子组件通信详解
  7. 《阿里大数据之路》研读笔记(1)
  8. 高德地图规划路线,并显示该路线的坐标
  9. oracle新建数据库卡85,oracle数据库(新建数据库)超小白篇
  10. vue图片路径错误,展示默认图片