最近点滴:
1,换了个很骚气的键盘(不能丢份呀~);
2,颈椎问题不大,注意姿势以及经常打羽毛球或游泳;
3,上周末医院补牙。
感想:
1,换键盘内在的原因更多的是“合群”。
2,随着年龄增长,各个零件需要修理和保养,才能更好地工作生活。
3,诊所建议带牙套,医院进行补牙处理;(诊所的目标是钱,医生的目标也许是患者数量,在保证质量的前提下,每个患者花费的精力尽量少)。
话不多说,上代码才是王道。

# coding:utf-8from py2neo import Node, Relationship, Graphfrom py2neo.matching import *import json##连接neo4j数据库,输入地址、用户名、密码neo4j_url = 'http://localhost:7474'auth = 'neo4j'password = '******'graph = Graph(neo4j_url, auth=auth, password=password)# 清空数据库graph.delete_all()#节点创建与关系创建的类class Create_data:def __init__(self,n_create,r_create):self.n_create = n_createself.r_create = r_createdef create_node(self):for n in self.n_create:graph.create(n)def create_relationship(self):for r in self.r_create:graph.create(r)#python创建节点node_1 = Node(label='西游记', name='唐玄奘',past_life = '金蝉子')node_2 = Node(label='西游记', name='唐玄奘',past_life = '石猴')node_3 = Node(label='西游记', name='猪八戒',past_life = '天蓬元帅')node_list =[node_1, node_2, node_3]#python创建关系r_1_2 = Relationship(node_1, '徒弟', node_2)r_1_2['count'] = 1r_2_1 = Relationship(node_2, '师傅', node_1)r_2_1['count'] = 1r_1_3 = Relationship(node_1, '徒弟', node_3)r_1_3['count'] = 1r_list = [r_1_2,r_2_1,r_1_3]#调用类进行neo4j数据库的关系与节点的创建create_data=Create_data(n_create=node_list,r_create =r_list)create_data.create_node()create_data.create_relationship()#查询'''参考Cypher语言data_all = graph.run('MATCH(n) return n').data() # 所有数据r_all = graph.run('MATCH()-[r]->() RETURN r').data() # 读取print('查询:','\n','所有数据',data_all,type(data_all))print('查询:','\n','所有关系',r_all,type(r_all))'''#精确条件查询节点信息node_matcher = NodeMatcher(graph) #创建节点匹配器node_matcher_all = list(node_matcher.match()) #所有节点node_all_str = json.dumps(node_matcher_all, ensure_ascii = False) #json 转换,以便正常显示中文node_all = json.loads(node_all_str)for i,n in enumerate(node_all):print('节点匹配结果 %d' %i ,n)for i,n in enumerate(node_all):print('节点匹配结果的name属性 %d' %i ,n["name"])node_matcher_tang = list(node_matcher.match(label = '西游记', name = '唐玄奘')) #返回匹配成功,并且name为'唐玄奘'的节点列表node_tang_str = json.dumps(node_matcher_all, ensure_ascii = False) #json 转换,以便正常显示中文node_tang = json.loads(node_all_str)for i,n in enumerate(node_tang):print('节点为"唐玄奘" %d' %i ,n)'''条件查询node_matcher_all = list(node_matcher.match()) .where("_.name =~ '唐.*'")'''#查询关系信息r_matcher = RelationshipMatcher(graph)r_matcher_all = list(r_matcher.match()) #所有关系for i,r in enumerate(r_matcher_all):print('关系匹配结果 = %d' %i,r)r_tudi = list(r_matcher.match(r_type='徒弟')) #'徒弟'关系for i,r in enumerate(r_tudi):print('"徒弟"关系匹配结果 = %d' %i,r)#更新Node的某个属性值,若node没有该属性,则新增该属性。首先是查询是否有此节点,若无则新建,有则增加属性node_update_tang = node_matcher.match(label = '西游记', name = '唐玄奘').exists() # 节点是否匹配if node_update_tang == False:node_update_tang = Node(label = '西游记', name = '唐玄奘') #新建graph.create(node_update_tang)else:node_update_tang_list = list(node_matcher.match(label='西游记', name='唐玄奘'))for i in node_update_tang_list:i['add'] = 'yes_2' #增加与修改的区别在于key-['add']不同而已graph.push(i) #推送到neo4j,才生效'''多属性更新data = { 'name': 'Amy', 'past_life': 23 }node_1.update(data)graph.push(node_1)'''#更新关系的某个属性值,若关系没有该属性,则新增该属性。首先是查询是否有此关系,有则更新属性r_update_tudi = r_matcher.match(r_type='徒弟').exists() #匹配徒弟关系if r_update_tudi == True:r_update_tudi_list = list(r_matcher.match(r_type='徒弟'))print(r_update_tudi_list)for i in r_update_tudi_list:i['update'] = 'yes_2' #增加与修改的区别在于key-['add']不同而已graph.push(i) #推送到neo4j,才生效else:pass#删除一个节点和关系(删除name = '猪八戒'的节点以及与此节点有关系的所有节点和关系)b = list(node_matcher.match(name = '猪八戒'))[0]print(b)graph.delete(b)#删除关系(所有关系为徒弟都将被删除)graph.run('match ()-[r:徒弟]->() delete r;')
上面代码实现了py对neo简单的增删改查。这里需要说明的是,py对数据进行更新后,执行 graph.push() 才能生效(推送到neo4j数据库)。发现用python操作neo4j更好的办法是操作Cypher(Cypher是描述性的图形查询语言,语法简单,功能强大)。
下一篇是用纯Cyhper进行Neo4j的操作。
文章转载自DATA江湖,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




