code: def getdminfo(self, columnname=None):
          
          dminfo = self._getdminfo()
          if columnname is None:
              return dminfo
          # Find the info for the given column
          for fld in dminfo.values():
              if columnname in fld["COLUMNS"]:
                  fldc = fld.copy()
                  del fldc['COLUMNS']  # remove COLUMNS field
                  return fldc
          raise KeyError("Column " + columnname + " does not exist")
docs: Get data manager info.
  
          Each column in a table is stored using a data manager. A storage
          manager is a data manager storing the physically in a file.
          A virtual column engine is a data manager that does not store data
          but calculates it on the fly (e.g. scaling floats to short to
          reduce storage needs).
  
          By default this method returns a dict telling the data managers used.
          Each field in the dict is a dict containing:
  
          - NAME telling the (unique) name of the data manager
          - TYPE telling the type of data manager (e.g. TiledShapeStMan)
          - SEQNR telling the sequence number of the data manager
            (is ''i'' in table.f<i> for storage managers)
          - SPEC is a dict holding the data manager specification
          - COLUMNS is a list giving the columns stored by this data manager
  
          When giving a column name the data manager info of that particular
          column is returned (without the COLUMNS field).
          It can, for instance, be used when adding a column using
          :func:`addcols` that should use the same data manager type as an
          existing column. However, when doing that care should be taken to
          change the NAME because each data manager name has to be unique.