[英]Declare a unique constraint for Neo4j relationships dependent on direction (ideally with py2neo)
[英]How to declare a unique contraint with py2neo
我需要在图形数据库上强制使用唯一约束。 我发现以下方法:
graph.schema.create_uniqueness_constraint("Website", "url")
但这会产生以下错误:
graph.schema.create_uniqueness_constraint("Website", "url")
AttributeError: 'Schema' object has no attribute 'create_uniqueness_constraint'
我的导入和图形说明是:
from py2neo import neo4j,node
graph = neo4j.GraphDatabaseService("http://localhost:7474/db/data/")
我在做什么错,该如何解决?
另外,用py2neo添加唯一性约束的最简单,最干净的方法是什么?
我对大量的方法感到困惑,有时似乎无缘无故会失败(找不到关于py2neo的全面教程),而且我开始觉得我最好写原始的Cypher查询...
看来您使用的是py2neo版本1.x,并正在阅读版本2.0的文档。 在py2neo 2.0中:
from py2neo import Graph
graph = Graph()
graph.schema.create_uniqueness_constraint('Website', 'url')
在py2neo 1.x中,我不确定是否存在创建唯一性约束的方法。 您可能需要做:
from py2neo import neo4j
graph = neo4j.GraphDatabaseService("http://localhost:7474/db/data/")
neo4j.CypherQuery(graph, 'CREATE CONSTRAINT ON (w:Website) ASSERT w.url IS UNIQUE;').run()
编辑:根据以下评论中的问题进行更新。 OP在py2neo 2.0上。
Neo4j不允许您在不指定标签的情况下创建唯一性约束。 但是,这在py2neo中很容易实现。 您可以使用graph.node_labels
来获取图形中所有标签的列表,然后可以对其进行迭代,并使用给定属性在每个标签上创建唯一性约束:
from py2neo import Graph
graph = Graph()
labels = graph.node_labels
for label in labels:
graph.schema.create_uniqueness_constraint(label, 'url')
注意,如果约束已经存在,将失败,并出现py2neo.error.ConstraintViolationException
否则,将失败。 您可能需要将其包装在try-except中:
for label in labels:
try:
graph.schema.create_uniqueness_constraint(label, 'url')
except:
pass
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.