在 NeoModel 中创建之前查看节点是否存在
See if node exists before creating in NeoModel
如何在 neomodel
中创建节点之前检查节点是否存在?除了过滤器之外,还有其他方法可以优化我的代码吗?
您可能正在寻找以下批处理操作之一:
我为此创建了自己的查询。检查是否有帮助。
def exists(node=None, property=None, value=None):
filter_node = (":" + node) if node != None else ''
filter_value = ("{" + property + ": '" + value + "'}") if property != None and value != None else ''
return db.cypher_query("MATCH(n" + filter_node + filter_value + ")" + " return count(n) > 0 as exists;" )[0][0][0]
exists(node='User')
您可以使用first_or_none来检查节点是否存在。
示例:
person = Person.nodes.first_or_none(name='James')
if person == None:
personNew = Person(name='James').save()
扩展@raman Kishore 的回答,我这样做了,因为我想检查对象是否存在,而且有时我会为自己插入一个 ID,因为它来自另一个数据库,我想保持兼容性,所以做了以下事情:
class DefaultMixin:
date_added = DateTimeProperty()
nodes: NodeSet # makes pycharm smarter
def exists(self, **filters):
if not filters:
if not self.id:
raise KeyError('no filters or id provided')
filters['id'] = self.id
return bool(self.nodes.first_or_none(**filters))
我在每个 StructuredNode classes 上创建了一个装饰器,它在初始化时检查节点。
def check_if_node_exists(node):
def node_checker(**kwargs):
result = node.nodes.first_or_none(**kwargs)
if result == None:
print("Creating New Node")
return node(**kwargs).save()
print("Returning Existing Node")
return result
return node_checker
@check_if_node_exists
class Employee(StructuredNode):
name = StringProperty()
要调用它,只需创建 class:
的一个实例
employee1 = Employee(
name = "test_name"
)
如何在 neomodel
中创建节点之前检查节点是否存在?除了过滤器之外,还有其他方法可以优化我的代码吗?
您可能正在寻找以下批处理操作之一:
我为此创建了自己的查询。检查是否有帮助。
def exists(node=None, property=None, value=None):
filter_node = (":" + node) if node != None else ''
filter_value = ("{" + property + ": '" + value + "'}") if property != None and value != None else ''
return db.cypher_query("MATCH(n" + filter_node + filter_value + ")" + " return count(n) > 0 as exists;" )[0][0][0]
exists(node='User')
您可以使用first_or_none来检查节点是否存在。
示例:
person = Person.nodes.first_or_none(name='James')
if person == None:
personNew = Person(name='James').save()
扩展@raman Kishore 的回答,我这样做了,因为我想检查对象是否存在,而且有时我会为自己插入一个 ID,因为它来自另一个数据库,我想保持兼容性,所以做了以下事情:
class DefaultMixin:
date_added = DateTimeProperty()
nodes: NodeSet # makes pycharm smarter
def exists(self, **filters):
if not filters:
if not self.id:
raise KeyError('no filters or id provided')
filters['id'] = self.id
return bool(self.nodes.first_or_none(**filters))
我在每个 StructuredNode classes 上创建了一个装饰器,它在初始化时检查节点。
def check_if_node_exists(node):
def node_checker(**kwargs):
result = node.nodes.first_or_none(**kwargs)
if result == None:
print("Creating New Node")
return node(**kwargs).save()
print("Returning Existing Node")
return result
return node_checker
@check_if_node_exists
class Employee(StructuredNode):
name = StringProperty()
要调用它,只需创建 class:
的一个实例employee1 = Employee(
name = "test_name"
)