docs: def execute(self, sql, *args, **kwargs):
      '''
      Run raw SQL on the database, and receive relaxing output.
      This is sort of the foundational method that most of the
      others build on.
      '''
      try:
        self.cursor.execute(sql, *args)
      except self.sqlite3.InterfaceError, msg:
        raise self.sqlite3.InterfaceError(unicode(msg) + '\nTry converting types or pickling.')
      rows = self.cursor.fetchall()
  
      self.__commit_if_necessary(kwargs)
  
      if None == self.cursor.description:
        return None
      else:
        colnames = [d[0].decode('utf-8') for d in self.cursor.description]
        rawdata = [OrderedDict(zip(colnames,row)) for row in rows]
        return rawdata