使用Python,C#和Java进行Neo4j连接 郝伟 2021/02/03 [TOC]
1. Python
1.1. neo4j驱动安装
在Python下安装:pip install py2neo
在Anaconda 下安装 : conda install -c anaconda neo4j-python-driver
注意:安装时需要管理员权限。
1.2. 测试代码1
本方法使用neo4j官方提供的GraphDatabase实现。
#coding:utf-8
from neo4j import GraphDatabase
def create_nodes(tx, cql):
''' CQL语句执行函数, 其中 tx为默认执行器,CQL就是执行语句 '''
return tx.run(cql)
print('Connecting 192.168.3.178:7687 ...')
driver=GraphDatabase.driver('bolt://192.168.3.178:7687', auth=('neo4j', '123456'))
print('Connected. \nBegin transctions...')
with driver.session() as session:
cql = 'CREATE (n1:Person{id: "1", name: "Tom"}), (n1:Person{id: "2", name: "Jack"})'
session.write_transaction(create_nodes, cql)
print('Done.')
1.3. 测试代码2
以下代码基于py2neo,操作也非常便利,更多用法可参考官方文档。
#coding:utf-8
from py2neo import Graph,Node,Relationship
##连接neo4j数据库,输入地址、用户名、密码
graph = Graph("bolt://192.168.3.178:7687",username='neo4j',password='123456')
##创建结点
n1 = Node('皇室成员', name='皇帝')
n2 = Node('皇室成员', name='皇后')
n3 = Node('皇室成员', name='公主')
graph.create(n1)
graph.create(n2)
graph.create(n3)
##创建关系
#分别建立了n1指向n2和n2指向n1两条关系,关系的类型为"丈夫、妻子",两条关系都有属性count,且值为1。
husband = Relationship(n1,'丈夫',n2)
husband['count'] = 1
wife = Relationship(n2,'妻子',n1)
wife['count'] = 1
mother = Relationship(n2,'母女',n3)
graph.create(husband)
graph.create(wife)
graph.create(mother)
print(graph)
print(n1)
print(n2)
print(husband)
print(wife)
print(mother)
输出结果
Graph('bolt://neo4j@192.168.3.178:7687')
(_12680:皇室成员 {name: '\u7687\u5e1d'})
(_12663:皇室成员 {name: '\u7687\u540e'})
(皇帝)-[:丈夫 {count: 1}]->(皇后)
(皇后)-[:妻子 {count: 1}]->(皇帝)
(皇后)-[:母女 {}]->(公主)
1.4. 其他推荐
还有一种工具叫 Pypher,能够以类似 Cypher 语法的方式进行操作,详见这里。 简介:Pypher is a suite of lightweight Python objects that allow the user to express Cypher queries in pure Python. Its main goals are to cover all of the Cypher use-cases through an interface that isn’t too far from Cypher and to be easily expandable for future updates to the query language.
2. Java Demo
2.1. 源代码
package neo4j_demo1;
import org.neo4j.driver.AuthTokens;
import org.neo4j.driver.Driver;
import org.neo4j.driver.GraphDatabase;
import org.neo4j.driver.Result;
import org.neo4j.driver.Session;
import org.neo4j.driver.Transaction;
import org.neo4j.driver.TransactionWork;
import static org.neo4j.driver.Values.parameters;
public class HelloWorldExample implements AutoCloseable {
private final Driver driver;
public HelloWorldExample(String uri, String user, String password) {
driver = GraphDatabase.driver(uri, AuthTokens.basic(user, password));
}
public void close() throws Exception {
driver.close();
}
public void printGreeting(final String message) {
try (Session session = driver.session()) {
String greeting = session.writeTransaction(new TransactionWork<String>() {
@Override
public String execute(Transaction tx) {
Result result = tx.run("CREATE (a:Greeting) " + "SET a.message = $message "
+ "RETURN a.message + ', from node ' + id(a)", parameters("message", message));
return result.single().get(0).asString();
}
});
System.out.println(greeting);
}
}
public static void main(String... args) throws Exception {
try (HelloWorldExample greeter = new HelloWorldExample("bolt://192.168.3.178:7687", "neo4j", "123456")) {
greeter.printGreeting("hello, world");
}
}
}
2.2. pom.xml 配置
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.huaun.aikg</groupId>
<artifactId>neo4j_demo1</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.neo4j.driver</groupId>
<artifactId>neo4j-java-driver</artifactId>
<version>4.0.1</version>
</dependency>
</dependencies>
</project>
2.3. 运行结果
Feb 02, 2021 7:21:25 PM org.neo4j.driver.internal.logging.JULogger info
INFO: Direct driver instance 288994035 created for server address 192.168.3.178:7687
hello, world, from node 57
Feb 02, 2021 7:21:27 PM org.neo4j.driver.internal.logging.JULogger info
INFO: Closing driver instance 288994035
Feb 02, 2021 7:21:27 PM org.neo4j.driver.internal.logging.JULogger info
INFO: Closing connection pool towards 192.168.3.178:7687
3. C#Demo
3.1. 源代码
连接代码
using Neo4j.Driver;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace New4j_HelloWorld
{
public class HelloWorldExample : IDisposable
{
private readonly IDriver _driver;
public HelloWorldExample(string uri, string user, string password)
{
_driver = GraphDatabase.Driver(uri, AuthTokens.Basic(user, password));
}
public void PrintGreeting(string message)
{
using (var session = _driver.Session())
{
var greeting = session.WriteTransaction(tx =>
{
var result = tx.Run("CREATE (a:Greeting) " +
"SET a.message = $message " +
"RETURN a.message + ', from node ' + id(a)",
new { message });
return result.Single()[0].As<string>();
});
Console.WriteLine(greeting);
}
}
public void Dispose()
{
_driver?.Dispose();
}
public void Main1()
{
}
}
}
主程序
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace New4j_HelloWorld
{
class Program
{
static void Main(string[] args)
{
//using (var greeter = new HelloWorldExample("bolt://192.168.3.178:7687", "neo4j", "123456"))
//{
// greeter.PrintGreeting("hello, world");
//}
}
}
}
3.2. 显示结果
hello, world, from node 58
Press any key to continue . . .
4. 参考资料
- The Neo4j Drivers Manual v4.1, https://neo4j.com/docs/driver-manual/current/
- Using Neo4j from Python, https://neo4j.com/developer/python/
- w3c的neo4j教程,https://www.w3cschool.cn/neo4j/