python 实现查询Neo4j多节点的多层关系

本文介绍如何使用Python编程查询Neo4j数据库,找出至少涉及三人且三者间存在关系的数据集合。
摘要由CSDN通过智能技术生成

需求:查询出满足3人及3案有关系的集合

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

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

from py2neo import Graph

import psycopg2

# 二维数组查找

def find(target, array):

 for i, val in enumerate(array):

  for j, temp in enumerate(val):

   if temp == target:

    return True

 return False

graph = Graph(host="192.168.3.186://7474", auth=("neo4j", "wabjtam123"))

data = graph.run('match data=(p:anjian)-[:参与 *2..5]-(u:anjian) with p,collect( distinct u.AJBH) as ajbhs match (p:anjian)-[:参与 *1..5]-(c:xyr) with p,ajbhs, collect(distinct c.XYRBH) as xyrbh_list,(ajbhs+p.AJBH) as ajbh_list where size(xyrbh_list)>2 and size(ajbh_list)>2 return p.AJBH as ajbh,ajbh_list,xyrbh_list')

aj = []

xyr_result = []

aj_result = []

for node in data:

 ajbh = node.get('ajbh')

 ajbh_list = node.get('ajbh_list')

 xyrbh_list = node.get('xyrbh_list')

  

 ajbh_list.append(ajbh)

  

 ajbh_list = list(set(node.get('ajbh_list')))

 xyrbh_list = list(set(node.get('xyrbh_list')))

  

 flag = True

 if len(aj_result) > 0:

  for i, val in enumerate(ajbh_list):

   f = find(val, aj_result)

    

   if f:

    flag = False

    break;

  

 if flag:

  if len(ajbh_list) > 2 and len(xyrbh_list) > 2:

   aj.append(ajbh)

    

    

   aj_result.append(ajbh_list)

   xyr_result.append(xyrbh_list)

    

    

   print('MATCH p=(:anjian{AJBH:"'+ajbh+'"})-[*]-() RETURN p LIMIT 25')

   name = str(len(xyrbh_list)) + "人" + str(len(ajbh_list)) + "案"

   print(name)

print(len(aj_result))

print(aj)

print('----------------------------')

print(aj_result)

conn = psycopg2.connect(database="zfgfh", user="postgres", password="postgres", host="192.168.3.202", port="5432")

cursor = conn.cursor()

  

for ajbh in aj_result:

 for temp in ajbh:

  insert_sql = "insert into test.gm (\"ajbh\") values ('%s')"

  insert_sql = insert_sql % temp

  print(insert_sql)

  # 插入

  cursor.execute(insert_sql)

# 提交

conn.commit()

cursor.close() # 关闭Cursor

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jh035

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值