龙空技术网

图数据库Python-py2eno应用(一)——Graph数据类型

软件测试开发技术栈 280

前言:

而今朋友们对“python常用数据库”大体比较讲究,看官们都需要剖析一些“python常用数据库”的相关文章。那么小编在网上搜集了一些关于“python常用数据库””的相关资讯,希望大家能喜欢,看官们快快来学习一下吧!

py2eno V4

neo4j数据库安装

官方下载链接

直接双击安装,安装后选择数据库存放位置,然后访问 ,修改密码即可(默认用户名:neo4j 密码 :neo4j)。

py2eno

在 database 模块中包含了和 Neo4j 数据交互的 API,最重要的当属 Graph,它代表了 Neo4j 的图数据库,同时 Graph 也提供了许多方法来操作 Neo4j 数据库。

py2eno安装

要通过python来操作Neo4j,首先需要安装py2neo,可以直接使用pip安装。

pip install py2neo

需要注意尽量使用python3环境进行安装,python2容易触发其他错误导致安装失败,原因开发者已经说明:

From the README: "Note also that Py2neo is developed and tested under Linux using standard CPython distributions. While other operating systems and Python distributions may work, support for these is not available."py2eno使用py2neo.data-数据类型

Neo4j使用的标号属性图模型的两个基本构建块是Node而Relationship。节点是图中数据存储的基本单元。它可以包含一组键值对(属性),并且可以选择使用一个或多个文本标签来装饰。关系是一对节点之间的类型化有向连接(或者环路在一个节点上)。与节点一样,关系也可能包含一组属性。

创建节点与关系

下面的代码展示了如何创建几个节点和连接它们的关系。每个节点都有一个属性,名字,姓名。关系ab描述知从第一个节点连接a到第二个节点b。

node_1 = Node(label = "bog",name = "小明")node_2 = Node(label = "girl",name = "小红")relationship_node = Relationship(node_1, "friends", node_2)#节点关系print(relationship_node )#属性数量print(len(node_2))--------------------------(小明)-[:friends {}]->(小红)*注意上面节点中没有节点标签信息,label = "bog",name = "小明"都是节点属性,关于标签下面会讲到。
判断节点相等

节点相等仅基于它所代表的远程节点的ID,属性和标签都不考虑是否相等。hash(node)返回散列为节点根据其对象ID(如果未绑定)或它所代表的远程节点的ID(如果绑定)

# 节点相等仅基于它所代表的远程节点的ID;属性和标签都不考虑是否相等。if node_1 != node_2 : return node_1 != node_2,hash(node_1),hash(node_2)else: return node_1 == node_2,hash(node_1),hash(node_2)----------------------------True, 80297392, 80297568
节点属性获取、修改、删除
#获取节点属性name = node_2['name']print(name)#修改节点属性node_2['name'] = "Jom"print(node_2)#删除节点属性,删除不存在的属性会触发KeyError异常del node_2['name']print(node_2)--------------------------小红({label: 'girl', name: 'Jom'})({label: 'girl'})
字典格式返回节点属性
# 节点所有属性返回字典。print(dict(node_2))# 节点属性名,keyprint(node_2.keys())-----------------------{'label': 'girl', 'name': 'Jom'}dict_keys(['label', 'name'])
添加节点标签
# 添加标签标签到节点node_2.add_label('student')print(node_2)# 返回与节点标签print(node_2.labels)# 判断节点是否存在某标签print ('student' in node_2.labels)---------------------(:student {label: 'girl', name: 'Jom'}):studentTrue
节点标签的删除、清空、添加
#移除指定标签.如果不存在抛ValueError异常node_2.remove_label('student')print(node_2)# 将多个标签添加到节点标签.node_2.update_labels(['teacher','school'])print(node_2)# 清楚所有标签node_2.clear_labels()print(node_2)--------------------({label: 'girl', name: 'Jom'})(:school:teacher {label: 'girl', name: 'Jom'})({label: 'girl', name: 'Jom'})
节点关系是否相等

关系创建支持如下几种方式:

class Relationship(start_node, type, end_node, **properties)class Relationship(start_node, end_node, **properties)class Relationship(node, type, **properties)class Relationship(node, **properties)

#新建节点 node_3node_3 = Node("Person",label='bog', name="小王")#建立节点关系relationship_node3 = Relationship(node_2,'friends', node_1,grade='502',number='56')print(relationship_node3)# 关系相等是基于开始节点、结束节点和关系类型的相等。print (relationship_node3 == relationship_node)print(hash(relationship_node3))--------------------(Jom)-[:friends {grade: '502', number: '56'}]->(小明)False7532033590336042421
获取关系属性
# 返回关系属性值,如无该key则返回Noneprint (relationship_node3['grade'])# 如果中包含有指定键,则返回该键对应的值,否则返回为该键设置的值。print (relationship_node3.setdefault('grade',None))----------------------502None
关系属性更新或添加
# 关系属性更新、或添加,如果key存在则更新,不存在则添加relationship_node3['grade'] = '503'print (relationship_node3)# 关系属性更新、或添加,如果key存在则更新,不存在则添加relationship_node3.update(gradea='602',rate='11')print (relationship_node3)--------------------(小明)-[:friends {grade: '503', number: '56'}]->(小明)(小明)-[:friends {grade: '502', gradea: '602', number: '56', rate: '11'}]->(小明)
关系属性删除
del relationship_node3['grade']print (relationship_node3)#获取属性数量print(len(relationship_node3))----------------------(小明)-[:friends {number: '56'}]->(小明)1
关系属性字典格式返回
print (dict(relationship_node3))----------------------{'grade': '502', 'number': '56'}

转载请说明出处。

标签: #python常用数据库