Perl et les bases de données (DBI)

Perl et les bases de données (DBI)

Création de la base de données, des tables SQL et insertion des données
Créons une base de données que nous nommerons France2011 via une console (ou une interface Web).
Commande SQL
/* Création de la base de données France2011
*/ CREATE DATABASE `France2011`;
C:\>mysql -u root -p Enter password:
***** Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 25 Server version: 5.1.31-community MySQL Community Server (GPL) Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer. mysql> CREATE DATABASE `France2011`; Query OK, 1 row affected (0.04 sec)
La suite sera totalement intégrée dans un script Perl. Créons un script CreationTableSQLFrance.pl qui se charge de créer les tables SQL et de les remplir avec les données du fichier. Voici notre programme :
CreationTableSQLFrance 1. #!/usr/bin/perl 2. #==========================================================================
# Auteur : djibril
# But : Création des tables SQL et insertion de données #==========================================================================
use warnings;
use strict;
use DBI; # Charger le module DBI 10. use vars qw/ $VERSION /; # Version du script
$VERSION = ‘1.0’;
# Paramètres de connexion à la base de données
my $bd = ‘France2011’;
my $serveur = ‘localhost’; # Il est possible de mettre une adresse IP
my $identifiant = ‘root’; # Identifiant
my $motdepasse = ‘admin’; # Nous n’avons pas de mot de passe
# Connexion à la base de données MySQL 20. my $dbh = DBI->connect( « dbi:mysql:dbname=$bd;host=$serveur; », $identifiant, $motdepasse )
or die « Connexion impossible à la base de données $bd ! »;
# Création des tables
print « Création de la table Regions\n »;
my $sql_creation_table_regions = <<« SQL »; 26. CREATE TABLE Regions (
id_region INT NOT NULL ,
cheflieu VARCHAR( 6 ) NOT NULL ,
tncc INT NOT NULL ,
ncc VARCHAR( 100 ) NOT NULL ,
nccenr VARCHAR( 100 ) NOT NULL ,
PRIMARY KEY ( id_region )
) COMMENT = ‘Les régions 2011 en France’;
SQL
$dbh->do(‘DROP TABLE IF EXISTS Regions;’) or die « Impossible de supprimer la table Regions\n\n »; 37. $dbh->do($sql_creation_table_regions) or die « Impossible de créer la table Regions\n\n »;
CreationTableSQLFrance 38. 39. print « Création de la table Communes\n »;
my $sql_creation_table_communes = <<« SQL »; 41. CREATE TABLE Communes (
id_communes INT NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT ‘Elle sera générée automatiquement.’, 43. cdc INT NOT NULL ,
cheflieu VARCHAR( 6 ) NOT NULL ,
id_region INT NOT NULL ,
id_departement VARCHAR( 10 ) NOT NULL ,
com INT NOT NULL ,
ar INT NOT NULL ,
ct INT NOT NULL ,
tncc INT NOT NULL ,
artmaj VARCHAR( 20 ) ,
ncc VARCHAR( 100 ) NOT NULL ,
artmin VARCHAR( 20 ) ,
nccenr VARCHAR( 100 ) NOT NULL
) COMMENT = ‘Les communes 2011 en France’;
SQL
$dbh->do(‘DROP TABLE IF EXISTS Communes;’) or die « Impossible de supprimer la table Communes\n\n »; $dbh->do($sql_creation_table_communes) or die « Impossible de créer la table Communes\n\n »;
print « Création de la table Departements\n »;
my $sql_creation_table_departements = <<« SQL »;
CREATE TABLE Departements ( id_departement VARCHAR( 10 ) NOT NULL COMMENT ‘les valeurs sont uniques’,
id_region INT NOT NULL ,
cheflieu VARCHAR( 6 ) NOT NULL ,
tncc INT NOT NULL , 6
ncc VARCHAR( 100 ) NOT NULL ,
nccenr VARCHAR( 100 ) NOT NULL ,
PRIMARY KEY ( id_departement ) ) COMMENT = ‘Les départements 2011 en France’;
SQL
$dbh->do(‘DROP TABLE IF EXISTS Departements;’) or die « Impossible de supprimer la table Departements \n\n »;
$dbh->do($sql_creation_table_departements) or die « Impossible de créer la table Departements\n\n »;
# Lecture des fichiers et insertion des données
my $fichier_regions = ‘reg2011.txt’;
my $fichier_communes = ‘comsimp2011.txt’; 80. my $fichier_departements = ‘depts2011.txt’;
# Fichier Region 83. print « Insertion des données dans la table regions\n »;
open my $fh_regions, ‘<‘, $fichier_regions or die « Impossible de lire le fichier $fichier_regions\n »;
my $entete_fichier_region = <$fh_regions>;
# Insertion des données
my $requete_sql_region = <<« SQL »; 89. INSERT INTO regions ( id_region, cheflieu, tncc, ncc, nccenr )
VALUES ( ?, ?, ?, ?, ? );
SQL
my $sth_regions = $dbh->prepare($requete_sql_region) or die $dbh->errstr;
while ( my $ligne = <$fh_regions> ) { 96. chomp $ligne;
my ( $REGION, $CHEFLIEU, $TNCC, $NCC, $NCCENR ) = split /\t/, $ligne;
$sth_regions->execute( $REGION, $CHEFLIEU, $TNCC, $NCC, $NCCENR )
or die « Echec Requête $requete_sql_region : $DBI::errstr »; 100. }
close $fh_regions;
# Fichier Communes
print « Insertion des données dans la table Communes\n »;
open my $fh_communes, ‘<‘, $fichier_communes or die « Impossible de lire le fichier $fichier_communes\n »;
my $entete_fichier_communes = <$fh_communes>;

Cours gratuitTélécharger le cours complet

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *