首页 > 解决方案 > 令人困惑的新模型`unique = True`行为

问题描述

unique属性的行为neomodel.StructuredNode让我有点困惑。

谁能指出我解释这一点的文档?或者让我知道我在误解什么?

该模型:

class Person(neomodel.StructuredNode):

    uuid = neomodel.UniqueIdProperty()

    legacy_external_id = neomodel.StringProperty(unique=True, required=False)

不是全部Person实例都具有此“legacy_external_id”,但尽管如此,它存在的地方必须是唯一的。

在我看来,上面的代码符合该描述。

然而在实践中,输出是:

In[]: p = Person(legacy_external_id='u12345')
In[]: p.save()
Out[]: < Person: {'uuid': '7d7e5c2224d647e9a87d23b9cb1c4153', 'legacy_external_id': 'u12345'} >

In[]: p = Person(legacy_external_id='u12345')
In[]: p.save()
Out[]: < Person: {'uuid': 'ed7690f8f28b4cf288c35d2130a2e6e4', 'legacy_external_id': 'u12345'} >

In[]: p = Person(legacy_external_id='u12345')
In[]: p.save()
Out[]: < Person: {'uuid': '7393a4b5022d40d8aca002cecac9b124', 'legacy_external_id': 'u12345'} >

只是愉快地增殖节点(没有错误或警告)不是我所期望的行为。

我很好地编写自己的验证,但在我继续这样做之前,我有兴趣了解我的误解。

任何建议表示赞赏,谢谢!

标签: pythonneo4j

解决方案


首先,应该是unique_index=True,不是unique=True

另外,当前版本的 Neomodel 不支持 和 的unique_index=True组合required=False。如果一个属性被设置为唯一,那么它也会被自动视为必需的(可能是因为否则,您可能有两个或多个具有空属性的节点,这不会是唯一的)。


推荐阅读