【问题标题】:See if node exists before creating in NeoModel在 NeoModel 中创建之前查看节点是否存在
【发布时间】:2015-09-24 19:12:12
【问题描述】:

如何在neomodel 中创建节点之前检查它是否存在?除了过滤器之外还有其他方法可以优化我的代码吗?

【问题讨论】:

    标签: python django neo4j py2neo neo4j-ogm


    【解决方案1】:

    您可能正在寻找以下批处理操作之一:

    【讨论】:

      【解决方案2】:

      为此,我创建了自己的查询。检查它是否有帮助。

      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')
      

      【讨论】:

        【解决方案3】:

        您可以使用 first_or_none 来检查节点是否存在。

        例子:

        person = Person.nodes.first_or_none(name='James')
        if person == None:
            personNew = Person(name='James').save()
        

        【讨论】:

          【解决方案4】:

          有点扩展@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))
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2020-07-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-09-03
            • 1970-01-01
            • 2014-07-23
            相关资源
            最近更新 更多