简体   繁体   English

Py2neo-在writebatch中创建关系

[英]Py2neo - creating relationships in writebatch

I use py2neo to dump data in a Neo4j database. 我使用py2neo将数据转储到Neo4j数据库中。

With this 有了这个

batch = neo4j.WriteBatch(graph_db)
batch.create(node(name="Alice"))
batch.create(node(name="Bob"))
batch.create(rel(0, "KNOWS", 1))
results = batch.submit()

I can create relationships using new nodes within the same batch. 我可以使用同一批中的新节点来创建关系。

However, if i try to create a relationship with a node that has already been created before the batch like this : 但是,如果我尝试与这样的批处理之前已经创建的节点建立关系:

n = graph_db.create({"name": "Smith"})
batch = neo4j.WriteBatch(graph_db)
batch.create(node(name="Alice"))
batch.create(rel(0, "KNOWS", n))
results = batch.submit()

It fails*. 它失败*。 How would one proceed to create nodes with relationships within a batch to nodes previously created? 人们将如何继续创建与先前创建的节点具有批处理关系的节点?

Using py2neo 1.5.1 and Neo4j 1.9.2 使用py2neo 1.5.1和Neo4j 1.9.2

Thanks 谢谢

  • Error message : 错误信息 :

SystemError: {u'stacktrace': [u'org.neo4j.server.rest.batch.NonStreamingBatchOperations.invoke(NonStreamingBatchOperations.java:63)', u'org.neo4j.server.rest.batch.BatchOperations.performRequest(BatchOperations.java:188)', u'org.neo4j.server.rest.batch.BatchOperations.parseAndPerform(BatchOperations.java:159)', u'org.neo4j.server.rest.batch.NonStreamingBatchOperations.performBatchJobs(NonStreamingBatchOperations.java:48)', u'org.neo4j.server.rest.web.BatchOperationService.batchProcess(BatchOperationService.java:117)', u'org.neo4j.server.rest.web.BatchOperationService.performBatchOperations(BatchOperationService.java:72)', u'java.lang.reflect.Method.invoke(Method.java:606)', u'org.neo4j.server.rest.security.SecurityFilter.doFilter(SecurityFilter.java:112)'], u'message': u'{\\n "message" : "For input string: \\"5078\\')]}\\"",\\n "exception" : "BadInputException",\\n "fullname" : "org.neo4j.server.rest.repr.BadInputException",\\n "stacktrace" : [ "org.neo4j.server.rest.web.RestfulGraphDatabase. SystemError:{u'stacktrace':[u'org.neo4j.server.rest.batch.NonStreamingBatchOperations.invoke(NonStreamingBatchOperations.java:63)',u'org.neo4j.server.rest.batch.BatchOperations.performRequest(BatchOperations .java:188)',u'org.neo4j.server.rest.batch.BatchOperations.parseAndPerform(BatchOperations.java:159)',u'org.neo4j.server.rest.batch.NonStreamingBatchOperations.performBatchJobs(NonStreamingBatchOperations.java :48)',u'org.neo4j.server.rest.web.BatchOperationService.batchProcess(BatchOperationService.java:117)',u'org.neo4j.server.rest.web.BatchOperationService.performBatchOperations(BatchOperationService.java:72 )',u'java.lang.reflect.Method.invoke(Method.java:606)',u'org.neo4j.server.rest.security.SecurityFilter.doFilter(SecurityFilter.java:112)'],u' message':u'{\\ n“ message”:“对于输入字符串:\\” 5078 \\')]} \\“”,\\ n“ exception”:“ BadInputException”,\\ n“ fullname”:“ org.neo4j。 server.rest.repr.BadInputException“,\\ n” stacktrace“:[” org.neo4j.server.rest.web.RestfulGraphDatabase。 extractNodeId(RestfulGraphDatabase.java:171)", "org.neo4j.server.rest.web.RestfulGraphDatabase.createRelationship(RestfulGraphDatabase.java:410)", "java.lang.reflect.Method.invoke(Method.java:606)", "org.neo4j.server.rest.security.SecurityFilter.doFilter(SecurityFilter.java:112)", "org.neo4j.server.web.Jetty6WebServer.invokeDirectly(Jetty6WebServer.java:302)", "org.neo4j.server.rest.batch.NonStreamingBatchOperations.invoke(NonStreamingBatchOperations.java:55)", "org.neo4j.server.rest.batch.BatchOperations.performRequest(BatchOperations.java:188)", "org.neo4j.server.rest.batch.BatchOperations.parseAndPerform(BatchOperations.java:159)", "org.neo4j.server.rest.batch.NonStreamingBatchOperations.performBatchJobs(NonStreamingBatchOperations.java:48)", "org.neo4j.server.rest.web.BatchOperationService.batchProcess(BatchOperationService.java:117)", "org.neo4j.server.rest.web.BatchOperationService.performBatchOperations(BatchOperationService.java:72)", "java.lang.reflect.Method.invoke(Method.jav extractNodeId(RestfulGraphDatabase.java:171)“,” org.neo4j.server.rest.web.RestfulGraphDatabase.createRelationship(RestfulGraphDatabase.java:410)“,” java.lang.reflect.Method.invoke(Method.java:606) ”,“ org.neo4j.server.rest.security.SecurityFilter.doFilter(SecurityFilter.java:112)”,“ org.neo4j.server.web.Jetty6WebServer.invokeDirectly(Jetty6WebServer.java:302)”,“ org.neo4j .server.rest.batch.NonStreamingBatchOperations.invoke(NonStreamingBatchOperations.java:55)“,” org.neo4j.server.rest.batch.BatchOperations.performRequest(BatchOperations.java:188)“,” org.neo4j.server.rest .batch.BatchOperations.parseAndPerform(BatchOperations.java:159)“,” org.neo4j.server.rest.batch.NonStreamingBatchOperations.performBatchJobs(NonStreamingBatchOperations.java:48)“,” org.neo4j.server.rest.java .batchProcess(BatchOperationService.java:117)“,” org.neo4j.server.rest.web.BatchOperationService.performBatchOperations(BatchOperationService.java:72)“,” java.lang.reflect.Method.invoke(Method.jav a:606)", "org.neo4j.server.rest.security.SecurityFilter.doFilter(SecurityFilter.java:112)" ],\\n "cause" : {\\n "message" : "For input string: \\"5078\\')]}\\"",\\n "exception" : "NumberFormatException",\\n "stacktrace" : [ "java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)", "java.lang.Long.parseLong(Long.java:441)", "java.lang.Long.parseLong(Long.java:483)", "org.neo4j.server.rest.web.RestfulGraphDatabase.extractNodeId(RestfulGraphDatabase.java:167)", "org.neo4j.server.rest.web.RestfulGraphDatabase.createRelationship(RestfulGraphDatabase.java:410)", "java.lang.reflect.Method.invoke(Method.java:606)", "org.neo4j.server.rest.security.SecurityFilter.doFilter(SecurityFilter.java:112)", "org.neo4j.server.web.Jetty6WebServer.invokeDirectly(Jetty6WebServer.java:302)", "org.neo4j.server.rest.batch.NonStreamingBatchOperations.invoke(NonStreamingBatchOperations.java:55)", "org.neo4j.server.rest.batch.BatchOperations.performRequest(BatchOperations.java:188)", "org.neo4j.ser a:606)“,” org.neo4j.server.rest.security.SecurityFilter.doFilter(SecurityFilter.java:112)“],\\ n”原因“:{\\ n”消息“:”对于输入字符串:\\“ 5078 \\')]} \\“”,\\ n“ exception”:“ NumberFormatException”,\\ n“ stacktrace”:[“ java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)”,“ java.lang.Long .parseLong(Long.java:441)“,” java.lang.Long.parseLong(Long.java:483)“,” org.neo4j.server.rest.web.RestfulGraphDatabase.extractNodeId(RestfulGraphDatabase.java:167)“ ,“ org.neo4j.server.rest.web.RestfulGraphDatabase.createRelationship(RestfulGraphDatabase.java:410)”,“ java.lang.reflect.Method.invoke(Method.java:606)”,“ org.neo4j.server。 rest.security.SecurityFilter.doFilter(SecurityFilter.java:112)“,” org.neo4j.server.web.Jetty6WebServer.invokeDirectly(Jetty6WebServer.java:302)“,” org.neo4j.server.rest.batch.NonStreamingBatchOperations。 invoke(NonStreamingBatchOperations.java:55)“,” org.neo4j.server.rest.batch.BatchOperations.performRequest(BatchOperations.java:188)“,” org.neo4j.ser ver.rest.batch.BatchOperations.parseAndPerform(BatchOperations.java:159)", "org.neo4j.server.rest.batch.NonStreamingBatchOperations.performBatchJobs(NonStreamingBatchOperations.java:48)", "org.neo4j.server.rest.web.BatchOperationService.batchProcess(BatchOperationService.java:117)", "org.neo4j.server.rest.web.BatchOperationService.performBatchOperations(BatchOperationService.java:72)", "java.lang.reflect.Method.invoke(Method.java:606)", "org.neo4j.server.rest.security.SecurityFilter.doFilter(SecurityFilter.java:112)" ],\\n "fullname" : "java.lang.NumberFormatException"\\n }\\n}', u'fullname': u'org.neo4j.server.rest.domain.BatchOperationFailedException', u'exception': u'BatchOperationFailedException'} ver.rest.batch.BatchOperations.parseAndPerform(BatchOperations.java:159)“,” org.neo4j.server.rest.batch.NonStreamingBatchOperations.performBatchJobs(NonStreamingBatchOperations.java:48)“,” org.neo4j.server.rest。 web.BatchOperationService.batchProcess(BatchOperationService.java:117)“,” org.neo4j.server.rest.web.BatchOperationService.performBatchOperations(BatchOperationService.java:72)“,” java.lang.reflect.Method.invoke(Method。 java:606)“,” org.neo4j.server.rest.security.SecurityFilter.doFilter(SecurityFilter.java:112)“],\\ n”全名“:” java.lang.NumberFormatException“ \\ n} \\ n}' ,u'fullname':u'org.neo4j.server.rest.domain.BatchOperationFailedException',u'exception':u'BatchOperationFailedException'}

In your code example, n will actually contain a list of nodes, not a single node (see the warning on the create method). 在您的代码示例中, n实际上将包含节点列表,而不是单个节点(请参阅有关create方法的警告)。 So, instead of... 所以,而不是...

n = graph_db.create({"name": "Smith"})

...you probably want... ...您可能想要...

n, = graph_db.create({"name": "Smith"})

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM