rescue true

10 mayo, 2010

Exportar SQL a CSV desde Rails

Archivado en: Ruby on Rails,Tips&Tricks — xurdekio @ 7:47 am
Tags: , , , ,

En muchas ocasiones nos encontramos con la problemática de tener que exportar muchos datos rapidamente de la base de datos SQL a un fichero CSV.

La forma mas cómoda es delegar el trabajo a la base de datos, que para eso ya lo tiene implementado. Por ejemplo vamos a exportar el archivo de libros de una biblioteca a un CSV desde nuestra aplicación rails.
En el modelo:

CSV_PATH = "#{RAILS_ROOT}/private/arhivo_biblioteca.csv"
def self.all_to_csv(path=CSV_PATH,separator=',',delimitator='"')
  #Esta es la consulta sql
  query = "SELECT l.id, l.autor, l.titulo, l.descripcion,  l.tema, l.editorial, l.paginas, l.localizacion, l.isbn  FROM `libros` l INTO OUTFILE '#{path}' FIELDS TERMINATED BY '#{separator}' ENCLOSED BY '#{delimitator}' LINES TERMINATED BY '\\n'" 
  ActiveRecord::Base.connection.execute(query) #Ejecutamos la consultar
  path #devolvemos la ruta del path 
end

Como podeis ver el método recibe 3 argumentos, que tienen valores por defecto:

      El path donde dejar el fichero
      El separador de los campos
      Y por último el delimitador

Si queremos usarlo desde el controlador nos valdrá algo como

  def exportar
    path = Libro.all_to_csv
    send_file(path)
  end

Ahora toca experimentar… podeis pasarle más parametros, como unas conditions para no sacar todos los libros, el orden, etc…

Tema Rubric. Blog de WordPress.com.

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.