带有Python驱动程序的Neo4j:创建的节点数远远少于预期?

时间:2016-11-21 08:23:49

标签: python neo4j cypher

我正在使用python脚本从SQL服务器检索一些数据,并在neo4j服务器中创建节点。

我使用带有 Cypher 语句的while循环逐个创建节点。循环运行约37000次(这是SQL服务器中表的行数),所以我希望neo4j服务器上有多少个节点。但是,neo4j服务器上只有943个节点。有什么想法吗?

以下是代码:

import pyodbc
from neo4j.v1 import GraphDatabase, basic_auth

# SQL part...#
cursor.execute(sqlQuery)  # retrieved data from SQL server..

print("let's connect to neo4j server....\n")
driver = GraphDatabase.driver("bolt://192.168.1.1:7687", auth=basic_auth("neo4j", "neo4j"))
session = driver.session()
print("now you've connected to server... :) \n")

j = int()
row = cursor.fetchone()
while row:
    j = j + 1
    msg = session.run("CREATE (:Person {name: '" + row[0] + "'});")  # Cypher
    row = cursor.fetchone()

print("total nodes created:",j)

1 个答案:

答案 0 :(得分:0)

我尝试了一个不同的 Class 来运行 Cypher 语句,这次一切都按照我的预期运行。

我们的想法是创建一个 Transaction 来运行多个Cypher语句,然后在最后提交。我是这样做的:

driver = GraphDatabase.driver("bolt://192.168.1.1:7687", auth=basic_auth("neo4j", "neo4j"))
session = driver.session()
print("now you've connected to server... :)")

j = int()
row = cursor.fetchone()

with session.begin_transaction() as tx:  
    while row:
        j = j + 1
        msg = tx.run("CREATE (:Person {Name: {n}});", {"n": row[0]})
        row = cursor.fetchone()
    tx.success = True  # commit the cypher statements

print("total nodes created:",j)

现在,如果我回到neo4j服务器来计算节点,那么数字将与我预期的完全相同。

还有一件事,我注意到Neo4j Bolt Driver for Python上的示例代码不正确。我们应该使用 session.begin_transaction(),而不是网站建议的 session.new_transaction()