code: def get_or_create(cls, *props, **kwargs):
          
          lazy = kwargs.get('lazy', False)
          relationship = kwargs.get('relationship')
  
          # build merge query
          get_or_create_params = [{"create": cls.deflate(p, skip_empty=True)} for p in props]
          query, params = cls._build_merge_query(get_or_create_params, relationship=relationship, lazy=lazy)
  
          if 'streaming' in kwargs:
              warnings.warn('streaming is not supported by bolt, please remove the kwarg',
                            category=DeprecationWarning, stacklevel=1)
  
          # fetch and build instance for each result
          results = db.cypher_query(query, params)
          return [cls.inflate(r[0]) for r in results[0]]
docs: Call to MERGE with parameters map. A new instance will be created and saved if does not already exists,
          this is an atomic operation.
          Parameters must contain all required properties, any non required properties with defaults will be generated.
  
          Note that the post_create hook isn't called after get_or_create
  
          :param props: dict of properties to get or create the entities with.
          :type props: tuple
          :param relationship: Optional, relationship to get/create on when new entity is created.
          :param lazy: False by default, specify True to get nodes with id only without the parameters.
          :rtype: list