code: def putmulti(self, kvpairs, dupdata=False, append=False, db=_DefaultDB):
          '''
          Returns:
              Tuple of number of items consumed, number of items added
          '''
          if self.readonly:
              raise s_exc.IsReadOnly()
  
          # Log playback isn't compatible with generators
          if not isinstance(kvpairs, list):
              kvpairs = list(kvpairs)
  
          try:
              self.dirty = True
  
              if not self.recovering:
                  self._logXactOper(self.putmulti, kvpairs, dupdata=dupdata, append=append, db=db)
  
              with self.xact.cursor(db=db.db) as curs:
                  return curs.putmulti(kvpairs, dupdata=dupdata, append=append)
  
          except lmdb.MapFullError:
              return self._handle_mapfull(f putmulti(self, kvpairs, dupdata=False, append=False, db=_DefaultDB):
          '''
          Returns:
              Tuple of number of items consumed, number of items added
          '''
          if self.readonly:
              raise s_exc.IsReadOnly()
  
          # Log playback isn't compatible with generators
          if not isinstance(kvpairs, list):
              kvpairs = list(kvpairs)
  
          try:
              self.dirty = True
  
              if not self.recovering:
                  self._logXactOper(self.putmulti, kvpairs, dupdata=dupdata, append=append, db=db)
  
              with self.xact.cursor(db=db.db) as curs:
                  return curs.putmulti(kvpairs, dupdata=dupdata, append=append)
  
          except lmdb.MapFullError:
              return self._handle_mapfull()
docs: Returns:
              Tuple of number of items consumed, number of items added