Python neo4j 结果对象永远挂起

Python neo4j Result object hangs forever

我正在使用 neo4j Python 驱动程序在本地 Neo4j 数据库上 运行 批量加载数据。我有以下包裹:

neo4j==4.4.1
neo4j-driver==4.4.1

我正在使用 apoc.periodic.iterate 方法。调用 return 是一个 Result 对象,它包含一个小字典,其中包含一些关于负载的数据。看起来像这样:

{'batches': 1,
 'total': 9,
 'timeTaken': 0,
 'committedOperations': 9,
 ...}

当负载很小的时候,我可以从Result中提取这个对象并保存。但是,当它更大时,我无法使用 Result 对象。我能够 print 对象的地址。但是,如果我尝试 运行 它的任何方法,或以任何方式从中提取数据,或从函数中 return 它,我的代码将永远挂起。但是,return 数据应始终具有相同的大小,因为它只是有关负载的一些元数据。

from neo4j import GraphDatabase
driver = GraphDatabase.driver(URI, auth=(user_name, password))
address = "test.csv"

cql = '''
     CALL apoc.periodic.iterate(
     "LOAD CSV WITH HEADERS FROM '%s' AS row
      WITH
        row.field1 AS field1,
        toFloat(row.field2) AS field2
        RETURN *",
            
      "MERGE (tx: Object {field1: field1})
       SET
         tx.field1 = field1,
         tx.field2 = field2;
      ",
      {batchSize: 10000, parallel: true, retries: 3})
            ''' % address

with driver.session() as session:
    result = session.run(cql)
    print(result)
    log_data = result.data()[0] # this line hangs forever with large loads

好吧,当从auto-commit交易功能切换到交易功能时,问题就消失了。因此,我没有采用上述方法,而是:

def transaction(tx):
    return dict(tx.run(cql).single())

with driver.session() as session:
    log_data = session.write_transaction(transaction)

https://neo4j.com/docs/driver-manual/1.7/sessions-transactions/