1. 测试

1.1web界面  http://tz211:7474/browser/

在这里执行 MATCH (n) RETURN n,能看到节点和相互关系

一共是3个节点,6个相互关系

1.2 在211执行cypher-shell

./cypher-shell -u neo4j -p 123456

1.3 执行convert-test.py

上述1.1和1.2和1.3是一致的。

1.4 在web节点执行删除所有节点命令

然后再找查询节点,发现没有节点了。符合预期。

在cypher-shell执行查询结果,也没有节点,符合预期。

在convert-test执行查询结果,也没有节点,符合预期。

1.5 在cypher创建节点

CREATE (:MP {num:"18717917632"});

在三处都能看到节点,正确。

MERGE (:MP {num:"18717917632"});

三处只有一个节点,正确。

MERGE (:MP {num:"18717917666"});

三处均增加了一个节点,正确。

再次执行

MERGE (:MP {num:"18717917666"});

三处没有变化,正确。

2. 代码测试

2.1 参考文档

《The Neo4j Developer Manual v3.2》python版

2.2 session

session是一个容器,它存储一系列的transaction事务。session从一个池里获取到连接。session不是线程安全的。

要把session放在一个context block,那么,当这个block执行完毕,session就可以正确地关闭。代码形如:

-----------------------------

def add_person(self, name):

session = self._driver.session()

session.run("CREATE (a:Person {name: $name})", {"name": name})

-----------------------------

session在add_person这个context里,如果add_persion执行结束,session就会正确关闭。

2.3 transaction事务

事务是一个原子单元,它包括一个或者多个cypher语句。每个事务都必然在一个session里执行。

执行一个cypher语句,需要两个信息:cyphter语句模板; cyphper语句参数。也可以执行无参数cypher,但有参数可以更好的调优。

有三种事务:

A. 自动提交事务  auto-commit transactions

B. 事务函数 Transaction functions

C. 显式事务 Explicit transactions

注意:只有B在事务出错的时候可以自动重新执行。

2.3.1 auto-commit transactions

这种事务,是简单的,形式有限,这种事务只有一条语句,事务失败后不能自动重放,不能放入causal chain执行。

这种事务,在session.run函数执行,形如:

--------------------------

def add_person(self, name):

session = self._driver.session()

session.run( "CREATE (a:Person {name: $name})", {"name": name} )

--------------------------

这种事务会立刻发送到数据库进行处理。

不要在生产环境使用这种事务。如果担心性能和稳定性,也不要使用这种事务。

2.3.2 事务函数 Transaction functions

这是推荐的事务类型。优先使用这种事务。举例如下:

--------------------------

def add_person(self, name):

with self._driver.session() as session:

session.write_transaction(lambda tx: self.create_person_node(tx, name))

def create_person_node(self, tx, name):

tx.run("CREATE (a:Person {name: $name})", {"name": name})

return 1

--------------------------

2.3.3 显式事务

这类事务,是2.3.2的详细版本,也就是说,显式生命BEGIN、COMMIT、ROOBACK操作。

这块需要检查python的源码,具体细节在官方文档里没有。

3. 一个完整的将数据以transaction functions的方式写入到neo4j的demo

从mysql数据库取记录,然后创建节点,然后创建关系。

---------------------------

#!/usr/bin/env python3

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

import pymysql

from neo4j.v1 import GraphDatabase

uri = "bolt://10.xx.xx.xx:7687"

driver = GraphDatabase.driver(uri, auth=("neo4j", "888888"))

print("先删除所有节点和关系")

with driver.session() as session:

session.write_transaction(lambda tx: tx.run("MATCH (n) DETACH DELETE n"))

print("检查是否为空")

with driver.session() as session:

session.write_transaction(lambda tx: tx.run('MATCH (n) RETURN n'))

conn = pymysql.connect(host='xxxxdb.mysql.rds.aliyuncs.com',

port=3306, user='userxxx', passwd='pswdxxxx',

db='ust', charset='utf8')

c_t = conn.cursor()

sql = 'select query_idcard, query_mobile, query_name, query_bankcard ' \

'from id34_record ' \

'where result_code=\'00\' or result_code=\'000\';'

c_t.execute(sql)

r_t = c_t.fetchall()

nnn = 0

for i in r_t:

# print(i)

if i[0] == None or i[1] == None or i[2] == None or i[3] == None:

#暂时不考虑三要素

continue

if (nnn % 100 == 0):

print('-'*10)

print(nnn)

# print(nnn)

nnn += 1

id = i[0]

mp = i[1]

name = i[2] #暂时不考虑姓名

bankcard = i[3]

#不重复地创建节点

node_type = 'MP'

with driver.session() as session:

session.write_transaction(

lambda tx: tx.run("MERGE (:MP {val:$val})", {'val':mp}))

node_type = 'ID'

with driver.session() as session:

session.write_transaction(

lambda tx: tx.run("MERGE (:ID {val:$val})", {'val':id}))

node_type = 'BANKCARD'

with driver.session() as session:

session.write_transaction(

lambda tx: tx.run("MERGE (:BANKCARD {val:$val})", {'val':bankcard}))

#创建关系

cmd = "MATCH (n:MP) WHERE n.val=\"%s\" \n" \

"MATCH (m:ID) WHERE m.val=\"%s\" \n" \

"MATCH (p:BANKCARD) WHERE p.val=\"%s\" \n" \

"MERGE (n)-[:BIND]->(m) \n" \

"MERGE (m)-[:BIND]->(n) \n" \

"MERGE (n)-[:BIND]->(p) \n" \

"MERGE (p)-[:BIND]->(n) \n" \

"MERGE (m)-[:BIND]->(p) \n" \

"MERGE (p)-[:BIND]->(m) \n" \

%(mp, id, bankcard)

with driver.session() as session:

session.write_transaction(

lambda tx: tx.run(cmd))

---------------------------

4. 建立索引

CREATE INDEX ON :MP(val) CREATE INDEX ON :ID(val) CREATE INDEX ON :BANKCARD(val)

Neo4j从mysql读取数据_[bigdata-086] python3+neo4j 从mysql数据库读取记录然后创建节点和关系写入到neo4j...相关推荐

  1. c 获取mysql列数据_转 用C API 操作MySQL数据库

    用C API 操作MySQL数据库 参考MYSQL的帮助文档整理 这里归纳了C API可使用的函数,并在下一节详细介绍了它们.请参见25.2.3节,"C API函数描述". 函数 ...

  2. oracle从mysql抓数据_关于oracle数据库读取数据的三种方式

    打开oracle sqldeveloper,连接到HR模式下的数据库,在SQL工作表中,执行如下语句: CREATE TABLE WANG( Name  varchar2(6), ID     num ...

  3. 多线程不重复读取数据_用 PHP 实现多线程编程

    (给PHP开发者加星标,提升PHP技能) 转自:腾讯云(枕边书) cloud.tencent.com/developer/article/1012783 1.前言 前些天帮同事查一个问题,第一次接触到 ...

  4. jdbc mysql 返回游标_使用JdbcTemplate流式(游标)读取数据库

    前言 生产环境中经常使用数据库分页的方式来控制一次获取的数据量,而数据处理中经常会有另外一种场景: 从一个数据库表中读取所有数据进行处理并将结果保存在其他数据库或文件或NoSql数据库中. 这时候也可 ...

  5. MySQL高性能数据_第三版(读书笔记)

    1. 如何保证在系统崩溃时,事务处理的数据一致性?(事务日志) 概念:事务日志可以帮助提升事务的效率. 使用事务日志,存储引擎在修改表的数据时只需要修改其内存拷贝,再把该修改行为记录到持久在硬盘上的事 ...

  6. java acr122 读取数据_使用ACR122U 从NTAG203Chip 读取数据

    1.使用NFC Pro(Android APK)读取的TAG信息: 2.连接ACR 122U之后,从设备管理处可以看出ACR122U采用标准的微软CCID和PC/SC驱动(USB CCID): 3.P ...

  7. pandas 按字符串肚脐眼 读取数据_十分钟学习pandas! pandas常用操作总结!

    学习Python, 当然少不了pandas,pandas是python数据科学中的必备工具,熟练使用pandas是从sql boy/girl 跨越到一名优秀的数据分析师傅的必备技能. 这篇pandas ...

  8. 多线程不重复读取数据_别再犯错了,多线程访问同一个资源一定要上锁?

    大家都知道,多线程访问同一个资源必须要做同步互斥,一定要用到锁,这个说法是完全正确的吗? 以常见的生产者消费者模型举例,这里我们只有一个生产者,一个消费者.即,一个线程不断的从一个设备读取数据,放入缓 ...

  9. python numpy读取数据_大神教你python 读取文件并把矩阵转成numpy的两种方法

    导读 今天小编就为大家分享一篇python 读取文件并把矩阵转成numpy的两种方法,具有很好的参考价值,希望对大家有所帮助.一起跟随小编过来看看吧 在当前目录下: 方法1: file = open( ...

最新文章

  1. Code Signal_练习题_extractEachKth
  2. 玩转oracle 11g(27):ora-12154和客户端版本低
  3. Windows Vista和局域网聊天的计算机
  4. MySQL入门之索引
  5. 51单片机 | 模拟PWM调制控制实验
  6. Windows Phone 7 有损 缩略图的生成!
  7. C语言爱心动态生日快乐代码
  8. noip2013提高组初赛(答案+选择题题目+个人分析)
  9. 可能的克服拖延症的方法
  10. zabbix Lack of free swap space
  11. :Pearl Pairing
  12. 微头条快速赚钱变现方法,一天可赚100元
  13. 关于文件上传失败的问题
  14. Java常见的线程安全工具容器类(待完善)
  15. CSS中的nth-child和nth-of-type选择器
  16. Day10QRadiobutton2021-09-24
  17. 使用 UI Flow 从O365管理界面下载报告时遇到的问题和解决办法
  18. ERP仓库管理系统需求
  19. 如何写出更”优质“的文章-内容篇
  20. 计算机表演赛新疆赛区,沙湾一中参加第26届全国计算机表演赛新疆赛区初战告捷...

热门文章

  1. idea js检查太卡_IntelliJ IDEA抑制、禁用与启用检查
  2. springboot 手动提交事务_面试官你都工作3年了,也做过5个项目了,怎么连事务机制都不会...
  3. 在集设网看世界顶级电影海报欣赏,太美了!
  4. 清新手绘水果平面设计|面膜的包装设计越来越精致了!
  5. 准备一些万圣节的乐趣——UI设计素材模板
  6. UI设计素材干货|分页符(指示器)各类型特点,可临摹的好模板
  7. UI设计干货模板素材|数据可视化UX套件
  8. javamail 超时_为什么JavaMail连接超时太长
  9. 基于嵌入式系统linux无线传感器网络软件平台,基于嵌入式网络的无线传感器网络平台硬件和软件实现...
  10. C++设置不定参数方法 简单示例