• Publicidad

Perl y Mysql

Todo acerca de las bases de datos que existen: SQL, MySQL, Oracle, Postgres, CSV, etc.

Perl y Mysql

Notapor raul2310 » 2009-12-12 11:26 @518

Hola amigos, estoy preparando un documento y necesito ilustrar cómo crear una base de datos (tabla) con la misma estructura del fichero /etc/passwd de Linux, completar la tabla y afichar la tabla con la ayuda de un script Perl y por último afichar algunos de los utilizadores con la ayuda de su "nombre".

Hasta este momento he podido hacer lo siguiente y me gustaría recibir sugerencias para avanzar.

En MySQL después de estar conectado ejecuto las siguientes instrucciones:
nombre del fichero de texto mibase.sql

Sintáxis: [ Descargar ] [ Ocultar ]
Using sql Syntax Highlighting
DROP DATABASE IF EXISTS users;
CREATE DATABASE users;
USE users;
CREATE TABLE usuarios (
    usager char(20),
    fil1 char(1),
    uid int,
    gid int,
    gecos char(30),
    rep_home char(50),
    programe char(50)
);
LOAD DATA INFILE '/etc/passwd' INTO TABLE usuarios FIELDS terminated BY ":";
SELECT * FROM usuarios;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


¿Es esto correcto?

Ahora cómo copiar la información a partir de /etc/passwd. Sé que me falta algo pero hice esto:

Creé el script en Perl
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2. open(fic_in,"/etc/passwd") || die "erreur d'ouverture du fichier ...\n";
  3. while($line=<fic_in>)
  4. {
  5.        chomp($line);
  6.        @champs=split(/:/,$line);
  7.        foreach $v (@champs)
  8.       {
  9.        print $v,"\n";
  10.       }
  11. }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Ahora no sé cómo afichar el resultado con otro script y por último si me piden un usuario por su nombre, cuál es la función Perl que me daría la información.

Agradezco de antemano la lectura y el interés por mi mensaje y bueno, si merezco una ayuda pues me causa mucho placer recibirla.

Buenos días
Raul
Última edición por explorer el 2009-12-12 11:57 @540, editado 1 vez en total
Razón: Ortografía, bloques de código
raul2310
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2009-12-02 21:34 @940

Publicidad

Re: Perl y Mysql

Notapor explorer » 2009-12-12 12:03 @544

Bienvenido a los foros de Perl en Español, raul2310.

Estás preguntando cómo cargar la información del fichero de contraseñas, y eso ya lo has hecho con la instrucción SQL LOAD DATA INFILE.

En este sitio tienes un tutorial relativo a lo básico del trabajo con una base de datos, en Perl.

Luego, el trabajo para incorporar más usuarios a la base de datos es con un INSERT y recuperar información, con un SELECT. Las dos son sentencias SQL que desde Perl las puedes ejecutar con la ayuda del módulo DBI, tal como te cuentan en el tutorial.

Prueba, y si tienes algún problema, publica el código y te ayudamos.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Perl y Mysql nueva consulta

Notapor raul2310 » 2009-12-13 18:50 @826

Buenas tardes.

Mire, disculpe la tanta molestia pero en verdad estoy interesado en aprender. Esto fue lo que logré hacer y me retorna un error. ¿Pudiera usted revisarlo y sugerirme qué hacer? ¡Ah!, de paso perdonen la palabra (utilisador) en lugar de utilizador; es solo para poder nombrar mi variable en francés.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2. use warnings;
  3. use strict;
  4.  
  5. use DBI;    # cargar le module DBI
  6.  
  7. # Parametros de conexion à la base de datos
  8. my $BaseDeDonnees = "users";
  9. my $NomHote       = "localhost"; # Es posible poner tambien la IP
  10. my $login         = "root";      # login
  11. my $MotDePass     = ""; # No hay password
  12. # Conexion à la base de datos mysql
  13. my $dbh = DBI->connect( "dbi:mysql:dbname=$BaseDeDonnees;host=$NomHote;",
  14.     $login, $MotDePass )
  15.     or die "Conexion imposible à la base de datos $BaseDeDonnees !";
  16.  
  17. # Creacion de tablas
  18. print "Creacion de la tabla Utilisador\n";
  19. my $SQLCreationTablesUtilisador = <<"SQL";
  20. crear table Utilisador(
  21. usager char(20),
  22. fil1 char(1),
  23. uid int,
  24. gid int,
  25. gecos char(30),
  26. rep_home char(50),
  27. programme char(50))
  28. SQL
  29.  
  30. $dbh->do("DROP TABLE IF EXISTS Utilisador;")
  31.     or die "Imposible de suprimir la tabla Utilisador\n\n";
  32. $dbh->do($SQLCreationTablesUtilisador)
  33.     or die "Imposible de crear la tabla Utilisador\n\n";
  34.  
  35. # Lectura de ficheros y insercion de datos
  36. my $FichieUtilisador = "/etc/passwd";
  37. # Fichero Utilisador
  38. print "Insercion de datos en la tabla Utilisador\n";
  39. open( my $FhUtilisador, '<', $FichieUtilisador )
  40.     or die("Imposible de leer el fichero $FichieUtilisador\n");
  41. my $EnteteFichierUtilisador = <$FhUtilisador>;
  42.  
  43. # Insercion de datos
  44. my $RequeteSQLUtilisador = <<"SQL";
  45. load data infile '/etc/passwd' into table Utilisador fields terminated by ":";
  46. SQL
  47.  
  48. my $sthUtilisateur = $dbh->prepare($RequeteSQLUtilisateur);
  49.  
  50. while ( my $ligne = <$FhUtilisador> )
  51.  {
  52.     chomp $ligne;
  53.  my ( $usager, $fil1, $uid, $gid, $gecos, $rep_home, $programme  ) = split( /\t/, $ligne );
  54.  
  55.     $sthUtilisador->execute( $usager, $fil1, $uid, $gid, $gecos, $rep_home, $programme  )
  56.         or die "Fallo Requete $RequeteSQLUtilisateur : $DBI::errstr";
  57. }
  58. close($FhUtilisador);
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
raul2310
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2009-12-02 21:34 @940

Re: Perl y Mysql

Notapor explorer » 2009-12-13 20:23 @891

Por favor, publica el error que te sale. Perl es muy expresivo con los errores y casi siempre acierta.

De todas formas, estoy viendo algo rarísimo... has mandado preparar a la base de datos para que ejecute una instrucción de lectura del fichero de usuarios, con lo que al ejecutarla, ya estará leído, pero a continuación, te pones a leer el fichero de usuarios, y por cada uno, ejecutas la sentencia de lectura del fichero entero.

Me temo que te has hecho un lío tremendo...

Una de dos...

* O ejecutas la sentencia SQL de lectura del fichero de usuarios, o

* Lees el fichero de usuarios, y por cada uno, haces un INSERT para meterlo en la base de datos.

Además, en la lectura haces un split() para que separe los campos, separados por tabuladores, pero el fichero /etc/passwd tiene los campos separados por ':'.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Bases de datos

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 5 invitados

cron