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…
