Importando datos SQL con Perl

Hace algun tiempo tenia que importar CSV a una tabla que tenia guardada en una base de datos Postgre para una materia de la escuela.

Como tenia un problema con la forma oficial para hacer esto y no funcionaba internet, con la ayuda de Perl arme un pequeño script que, leyendo desde un archivo CSV, generaba sentencias “insert” con los datos para luego pegarlos en una consola y de esa forma tener mís datos importados… como quien dice, una “rebuscada freak”

En fin, el código pueden verlo a continuación o bien desde mí cuenta de gitHub en: https://github.com/tehsis/importSQL

EDIT: Debido a que el script fue sufriendo algunos cambios desde que lo publique, dejo solo el link al repo


4 Responses to “Importando datos SQL con Perl”

Tordek on November 22nd, 2010 5:29 am:

Recomendaciones:

1) Explotá la filosofía de streams de *NIX: no pidas archivos para leer y escribir; leé de stdin y escribí en stdout.
2) Si vas a parsear a mano el csv (cosa que es mala por la forma en que se manejan las comillas), usá “split(/\s*,\s*/)”, así no tenés espacios extra.
3) El primer join/split que hacés da exactamente lo mismo que si no hubieras hecho ninguno.
4) Usá chomp para sacar los espacios y \n que sobran.
5) Combiná todos los inserts en uno solo, pasando values nuevos.


#!/usr/bin/env perl

use warnings;
use strict;

# Read the first parameter: tablename.
my $tablename = shift;

# The first line holds the names of the fields.
my $fields = ;
chomp $fields;

print "INSERT INTO $tablename ($fields) values";

my $firstline = 1;

# The rest of the VALUE groups are comma-separated.
while () {
chomp;
if ($firstline) {
# The first insert is special-cased to avoid a trailing comma.
print "\n";
$firstline = 0;
} else {
print ",\n";
}

print "('" . join ("','", split(/\s*,\s*/)) . "')";
}

print ";\n";


Tehsis on November 22nd, 2010 2:10 pm:

Acertados tus correcciones…

no se que habré querido hacer con esa primer linea xD, insisto en que arme el script en 10 minutos durante una clase para safar :P

Gracias por las correcciones, más tarde las subo


Tordek on November 22nd, 2010 5:08 pm:

Also, para cuando hacés scripts chicos, o snippets de código que se lean de un pantallazo, crear un repo es un poquito overkill. Github te da gist, que es justamente para eso:

https://gist.github.com/710449


Tehsis on November 22nd, 2010 5:21 pm:

Mira vos, no conocía eso. Thanks again


Leave a Reply

(required)

(required)