Sqlite

From Base de connaissances eggdrops & TCL
Jump to: navigation, search

Description

SQLite est une petite libraire en C qui implémente une moteur de base de données compatible SQL92 ne nécessitant aucune configuration.

Outre son extrême simplicité de mise en oeuvre, sa grande force est que la base de données est entièrement contenue dans un seul fichier, facile à copier, embarquer, etc..

Version actuelle

sqlite3 version 3.7.13

Installation

Sous debian, l'installation se fait simplement avec apt-get: apt-get install libsqlite3-tcl

Utilisation

Il faut noter un point essentiel : si la base n'existe pas, elle est créée automatiquement lors de son ouverture.

Initialisation / Ouverture

Nous créons ici un connecteur db1 vers la base de données databases/biblio.db.

package require sqlite3
sqlite3 db1 databases/biblio.db
Attention.png Notez bien que la base est créée relativement à l'emplacement de l'eggdrop


Création des tables

db1 eval {CREATE TABLE auteur (aut_id integer primary key, aut_auteur text)}

La table auteur contient un index a_id et le nom de l'auteur

db1 eval {CREATE TABLE livre (liv_id integer primary key, liv_aut integer, liv_titre text)}

La table livre contient aussi un index liv_id, un titre liv_titre, et liv_aut contiendra l'index de l'auteur dans la table auteur.

Ajout de données dans les tables

db1 eval {INSERT INTO auteur (aut_id, aut_auteur) VALUES (1, "Pierre Bordage")}
db1 eval {INSERT INTO auteur (aut_id, aut_auteur) VALUES (2, "Frédéric Fabri")}
db1 eval {INSERT INTO auteur (aut_id, aut_auteur) VALUES (3, "Corentin")}
db1 eval {INSERT INTO livre (liv_id, liv_aut, liv_titre) VALUES (1, 1, "Les derniers hommes")}
db1 eval {INSERT INTO livre (liv_id, liv_aut, liv_titre) VALUES (2, 1, "La fraternité du Panca")}
db1 eval {INSERT INTO livre (liv_id, liv_aut, liv_titre) VALUES (3, 2, "Cycle Beta")}
db1 eval {INSERT INTO livre (liv_id, liv_aut, liv_titre) VALUES (4, 3, "Human Genome")}

Requêtes sur les données

Combien de livre dans la bibliothèque ?

set nb [db1 eval {SELECT COUNT(liv_id) FROM livre}]
putlog "Nombre de livre dans la BDD : $nb"

Quelles sont les livres dans la bibliothèque ?

db1 eval {SELECT liv_titre FROM livre} {
   putlog $liv_titre
}

Il y a eu création de la variable de même nom que la colonne sur la table.

Par exemple, les résultats seront dans les variables aut_id et aut_auteur, dans la requête suivante

 db1 eval {SELECT * FROM auteur} {
   puts "Id Auteur : $aut_id \n Auteur : $aut_auteur"
}

Liste des livres avec leurs auteurs

set tab [db1 eval {SELECT livre.liv_titre, auteur.aut_auteur from livre, auteur WHERE livre.liv_aut = auteur.aut_id}]

Combien d'éléments ont été retournés

putlog "Nb éléments : [llength $tab]"

L'élément n° 2, attention cela commence à 0

putlog "Un éléments particulier: [lindex $tab 2]"

Affiche le livre et l'auteur

putlog "Portion de liste : [lrange $tab 0 1]"

Affichage du titre du livre et auteur par ligne

for {set i 0} { $i < [llength $tab]} {incr i 2} {
   putlog "[lrange $tab $i $i] [lrange $tab $i+1 $i+1]"
}

Retourne, sous forme d'un tableau, les livres écrits par Pierre Bordage

db1 eval {SELECT liv_titre from livre, auteur WHERE livre.liv_aut = auteur.aut_id AND auteur.aut_auteur = "Pierre Bordage"} liste_livre {
   foreach nom [array names liste_livre] {
      putlog "Valeur associée à \"$nom\": $liste_livre($nom)
   }
}

Injection d'un fichier csv sur la table livre

Ici il y a remplacement des données, le séparateur est ;

set rec [db1 copy replace livre monfichier.csv ";" "NULL"]

Fermeture de la base

db1 close