我有一个neo4j数据库,其节点标签为“程序”和“会话”。在Neo4j数据库中,我强制实现了属性的唯一性约束:“name”和“href”。从:架构py2neo不强制Neo4j数据库中的唯一性约束
Constraints
ON (program:Program) ASSERT program.href IS UNIQUE
ON (program:Program) ASSERT program.name IS UNIQUE
ON (session:Session) ASSERT session.name IS UNIQUE
ON (session:Session) ASSERT session.href IS UNIQUE
我想定期查询另一个API(因而存储的名称和API端点的href属性),只有当他们不是已经在数据库中添加新节点。
这是我如何创建节点:
newprogram, = graph_db.create(node(name = programname, href = programhref))
newprogram.add_labels('Program')
newsession, = graph_db.create(node(name = sessionname, href = sessionhref))
newsession.add_labels('Session')
我遇到了以下错误:
Traceback (most recent call last):
File "/Users/jedc/google-cloud-sdk/platform/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 1535, in __call__
rv = self.handle_exception(request, response, e)
File "/Users/jedc/google-cloud-sdk/platform/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 1529, in __call__
rv = self.router.dispatch(request, response)
File "/Users/jedc/google-cloud-sdk/platform/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 1278, in default_dispatcher
return route.handler_adapter(request, response)
File "/Users/jedc/google-cloud-sdk/platform/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 1102, in __call__
return handler.dispatch()
File "/Users/jedc/google-cloud-sdk/platform/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 572, in dispatch
return self.handle_exception(e, self.app.debug)
File "/Users/jedc/google-cloud-sdk/platform/google_appengine/lib/webapp2-2.5.2/webapp2.py", line 570, in dispatch
return method(*args, **kwargs)
File "/Users/jedc/appfolder/applicationapis.py", line 42, in post
newprogram.add_labels('Program')
File "/Users/jedc/appfolder/py2neo/util.py", line 99, in f_
return f(*args, **kwargs)
File "/Users/jedc/appfolder/py2neo/core.py", line 1638, in add_labels
if err.response.status_code == BAD_REQUEST and err.cause.exception == 'ConstraintViolationException':
AttributeError: 'ConstraintViolationException' object has no attribute 'exception'
我的想法是,如果我尝试添加节点和他们已经在数据库中,他们不会被添加。
我已经做了一个尝试/除了创建/ add_labels行的AttributeError块,但是当我这样做时,我设法复制了已经在数据库中的所有东西,即使我显示了约束条件。 (?!?)(py2neo如何能够违反这些约束??)
我真的很困惑,并希望得到任何帮助,了解如何添加节点时,只有当他们不存在。
约束不会被违反,直到您添加标签,您在创建节点后正在执行该标签。所以节点被创建,但add_label应该失败。 –
我想另一个问题是我可以添加与标签无关的约束吗? (我猜我不能。) –
你能说一句话吗? graph.create(节点).add_label()? –