У меня есть база данных neo4j с узлами, у которых есть ярлыки «Программа» и «Сессия». В базе данных Neo4j я установил ограничение уникальности для свойств: «name» и «href». Из: схемы
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 (таким образом, сохраняя имя и href конечной точки API как свойства) и добавлять новые узлы только тогда, когда их еще нет в базе данных.
Вот как я создаю узлы:
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'
Я думал, что если я попытаюсь добавить узлы, а они уже находятся в базе данных, они просто не будут добавлены.
Я сделал блок try / except AttributeError вокруг строк create / add_labels, но когда я это сделал, мне удалось продублировать все, что уже было в базе данных, даже несмотря на то, что у меня были показанные ограничения. (?!?) (Как py2neo может нарушить эти ограничения ??)
Я действительно смущен и был бы признателен за любую помощь в выяснении того, как добавлять узлы только тогда, когда они еще не существуют.