neo4j python 驱动开发入门

使用依赖管理获得驱动
使用pip依赖管理工具运行如下命令:
pip install neo4j-driver
指定版本
pip install neo4j-driver==1.6.0
使用官方驱动包
每个Neo4j驱动程序都有一个用于创建驱动程序的数据库对象。要使用驱动程序,请按照以下步骤:
(1)向数据库对象请求一个新的驱动程序;
(2)向驱动程序对象请求一个新会话;
(3)请求会话对象创建事务;
(4)使用事务对象运行语句。它返回一个表示结果的对象;
(5)处理结果;
(6)关闭会话。
创建驱动实例
Neo4j客户端应用程序将需要一个驱动程序对象实例以提供对数据库的访问。
链接URIs
1,bolt
2,bolt+routing
bolt,bolt://localhost:7687 ,用于与单个数据库实例保持持久链接
bolt+routing,bolt+routing://graph.example.com:7687,用于与群集协同工作以将事务路由到可用群集成员,地址必须为集群的核心服务器地址。

授权链接方式
1,基本授权链接方式
2,kerberos授权链接方式 https://neo4j.com/docs/add-on/kerberos/current/
3,用户自定义授权链接方式https://neo4j.com/docs/api/dotnet-driver/current/html/dfa43d02-b237-b1b5-bb15-814cf3232eda.htm

配置
驱动程序中的配置设置可以给驱动程序提供构造函数的参数。在接下来的部分将介绍如何具体操作。
配置加密机制
1,加密
2,不使用加密

配置信任机制

信任策略 说明
TRUST_ALL_CERTIFICATES(默认) 接受服务器提供的所有认证
TRUST_CUSTOM_CA_SIGNED_CERTIFICATES 接受任何可以通过自定义CA进行验证的证书
TRUST_SYSTEM_CA_SIGNED_CERTIFICATES 接受任何可以通过系统商店进行验证的证书

配置链接池
1,MaxConnectionLifetime 可以保持连接的最长周期,超时连接将被从连接池中移除
2,MaxConnectionPoolSize 连接池管理的每个主机允许的最大连接总数。
3,ConnectionAcquisitionTimeout 会话或事务在抛出异常之前可以花费等待空闲连接出现的最长时间

事例代码:

    from neo4j.v1 import GraphDatabase,kerberos_auth, custom_auth, TRUST_ALL_CERTIFICATES
    class DriverLifecycleExample:
		def __init__(self, uri, user, password):
	        #  实例化需数据库uri和账户、密码
	        self._driver = GraphDatabase.driver(uri, auth=(user, password))
	        # kerberos授权方式
	        self._driver = GraphDatabase.driver(uri, auth=kerberos_auth(ticket))
	        # 用户自定义授权方式
	        # self._driver = GraphDatabase.driver(uri, auth=custom_auth(principal, credentials, realm, scheme, **parameters))
	        #配置取消加密链接
	        # self._driver = GraphDatabase.driver(uri, auth=(user, password), encrypted=False)
	        #配置信任级别
	        self._driver = GraphDatabase.driver(uri, auth=(user, password), trust=TRUST_ALL_CERTIFICATES)
	
	        #配置连接池
	        # self._driver = GraphDatabase.driver(uri, auth=(user, password),
	        #                                     max_connection_lifetime=30 * 60, max_connection_pool_size=50,
	        #                                     connection_acquisition_timeout=2 * 60)
	
	        #配置超时时延
	        # self._driver = GraphDatabase.driver(uri, auth=(user, password), connection_timeout=15)
	
	        #配置负载均衡策略
	         # self._driver = GraphDatabase.driver(uri, auth=(user, password),
	         #                                     load_balancing_strategy=LOAD_BALANCING_STRATEGY_LEAST_CONNECTED)
	
	        #配置事务重试时间
	        # self._driver = GraphDatabase.driver(uri, auth=(user, password), max_retry_time=15)

	    def close(self):
	        self._driver.close()

配置负载均衡策略
least-connected (默认)
round-robin.

Session、事务 与 执行Cypher语句
与Neo4j数据库的所有交互都在session中进行的。每个session会话是针对数据库的一个或多个事务。
session会话是用于事务处理的轻量级容器。Session可以从驱动程序对象中获取。
使用路由驱动程序时,可以将session会话访问模式声明为READ或WRITE。驱动程序将针对所选工作模式对指定的集群成员创建会话。
在通常情况下,事务可以保证从用session创建运行的语句到对于每个语句的结果处理以及任何异常都能够在可控的范围内。当事务序列全部被执行完毕后,会话被关闭。
Session
Session会话如同Web开发中的Session,可以区分开不同的操作实例。可以使用driver.session方法来创建一个新的Session。Session会话创建是一个低资源消耗的过程。底层连接将从构建的驱动程序连接池创建Session,并在关闭时返还到连接池。
要注意,Session会话不是线程安全的。
访问模式:
当驱动程序启用路由时,需要先指定访问模式:READ或WRITE。如果省略,则默认使用WRITE模式。
路由驱动程序将分别针对适合于写入或读取的实例创建会话。针对因果集群进行部署意味着驱动程序可以有效地路由读取和写入。读取是针对只读副本,而写入集群的操作需要进行一致提交和保管处理。
如果创建会话的实例对于声明的访问模式不再可用,那么应用程序将接收到一个SessionExpiredException。发生这种情况时,应用程序应从驱动程序获取另一个会话并重新执行失败的事务
连接池:
驱动程序具有连接池,Session会话将借用连接来执行其工作。当会话关闭时,Session将返回到连接池。最重要的是确保会话是正确关闭的,以便结果和错误完全由客户端接收,并且Session连接可以重新使用。
另外,当抛出异常时Session会话会被关闭,这样可以确保执行所有操作是稳定可靠的。
回滚事务
在代码中想要回滚事务是非常容易的:
自动提交事务
虽然通常情况下事务在程序中是被明确声明了的,但有些情况下Session的run方法可以隐含的自动提交需要运行语句的事务,这只出现在只读查询的情况下,因为读操作不会改变数据库内容。
自动提交事务不支持书签功能,并且在调试时难以诊断故障。

查询语句中的参数
建议在查询语句中始终使用参数。使用参数具有显着的性能和安全优势:
(1)参数允许查询中重复使用,使查询更加高效。
(2)它保护数据库免受Cypher注入攻击。
但是,可以运行带有字面值(literal)的查询。

返回结果
结果游标提供了对结果记录流的访问。游标可以不断依次指向结果集合中的每个记录。在将游标移动到第一条记录之前,它会先指向记录的起始位置。一旦游标已经遍历到结果流的末尾,就可以使用摘要信息和元数据。
随着游标在结果集中前进,结果记录将被惰性加载。这意味着必须将游标移动到第一个结果,然后才能使用此结果。通常最好的做法是明确使用结果和关闭会话,特别是在运行update语句时。

参考:https://neo4j.com/developer/python/
参考:https://github.com/neo4j/neo4j-python-driver
参考:https://neo4j.com/docs/api/python-driver/current/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值