【发布时间】:2015-09-24 19:12:12
【问题描述】:
如何在neomodel 中创建节点之前检查它是否存在?除了过滤器之外还有其他方法可以优化我的代码吗?
【问题讨论】:
标签: python django neo4j py2neo neo4j-ogm
如何在neomodel 中创建节点之前检查它是否存在?除了过滤器之外还有其他方法可以优化我的代码吗?
【问题讨论】:
标签: python django neo4j py2neo neo4j-ogm
您可能正在寻找以下批处理操作之一:
【讨论】:
为此,我创建了自己的查询。检查它是否有帮助。
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))
【讨论】: