[LUG.ro] sql importar csv

Fernando Scandolo (D`arcy) darcy en darcy.com.ar
Vie Mar 6 14:15:18 ART 2009


2009/3/6 Ezequiel Pochiero <epochiero en gmail.com>

> Juan Pablo Villalba-A favor del Open Source escribió:
> > hola
> >        Les comento que me estoy iniciando en el mundo PHP+MYSQL y
> necesito
> > automatizar una tarea en el servidor.lo que necesito puntualmente es lo
> > siguiente: que cada 6 hs se importe un archivo *.csv a una base de datos
> en
> > mysql.estuve googleando y buscando info, sobre si existe en el lenguaje
> sql
> > algo que importe archivos y no encontre nada...la automatizacion deberia
> > hacerla con crontab? Gracias
>
> Hola Juan, fijate este link[0], no lo lei a fondo pero al parecer es lo
> que necesitas. Lo que deberías hacer es tener el script en SQL en un
> archivo, por ejemplo, importar.sql, y en crontab una linea de la forma
> mysql < importar.sql.
>
> Saludos.
>
> [0]http://www.modwest.com/help/kb6-253.html
> _______________________________________________
> Lugro mailing list
> Lugro en lugro.org.ar
> http://www.lugro.org.ar/mailman/listinfo/lugro
>

Podrias meter un script como este en el crontab:

======================================================
#! /usr/bin/ruby

require 'csv'
require 'mysql'

csv_filename = 'test.csv'
mysql_server = 'localhost'
mysql_user = 'usuario'
mysql_password = 'password'
mysql_dbname = 'base'

db = Mysql.real_connect(mysql_server, mysql_user, mysql_password,
mysql_dbname)

CSV::Reader.parse(File.open(csv_filename, 'r')) do |row|

    campo1 = db.escape_string row[0]
    campo2 = db.escape_string row[1]
    campo3 = db.escape_string row[2]

    dbh.query("INSERT INTO tabla (campo1, campo2, campo3) VALUES
(${campo1},${campo2},${campo3})")
end

db.close
======================================================

Para eso necesitas ruby y libmysql-ruby


Más información sobre la lista de distribución Lugro