我正在使用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)
答案 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()。