#!/usr/bin/python
# -*- coding: UTF-8 -*-


"""
    Programme pour tester les acces a une base de donnees de type MySQL.
"""


###############################################################################
# Informations de versions
###############################################################################
__project__   = 'Applications Bases de donnees'
__author__    = 'Simon CHOLLET (s.chollet@llr.in2p3.fr)'
__modifiers__ = ''
__date__      = '19/09/2011'
__version__   = '1.0'


###############################################################################
# Importations
###############################################################################
# Les fonctions du module MySQLdb
import MySQLdb


###############################################################################
# Definitions specifiques
###############################################################################


###############################################################################
# Declaration des classes / fonctions
###############################################################################


#
#
# Fonction appelee lors de la demande
# d'execution de la classe/module
if __name__ == "__main__":

    # Ouverture de la connexion vers la base de donnees
    db = MySQLdb.connect(host = "localhost", user = "test", passwd = "tempor",
        db = "annuaire")

    # Creation d'un curseur de parcours de donnees
    cursor = db.cursor()

    # Demande de la version de serveur de bases de donnees
    cursor.execute("SELECT VERSION()")
    row = cursor.fetchone()

    # Affichage de la version du serveur
    print "Server version :", row[0]

    # Suppression de la table si elle existe
    cursor.execute("DROP TABLE IF EXISTS persons")

    # Affichage de messages d'informations
    print ">>>> PyMySQL <<<<"
    print " * Creation de la table : persons"

    # Creation de la table persons de l'annuaire
    cursor.execute("""
        CREATE TABLE persons
        (
            ID    int NOT NULL auto_increment,
            title char(255),
            name  char(255),
            sname char(255),
            birth date,
            exper int,
            PRIMARY KEY (ID)
        )
        """)

    # Remplissage de la table
    cursor.execute("""
        INSERT INTO persons (title, name, sname, birth, exper)
        VALUES
        ('Mr', 'DUPONT', 'Pierre', '1960-06-30', '30'),
        ('Melle', 'LA PIERRE', 'Marie', '1963-07-21', '20'),
        ('Mme', 'MOUTE', 'Catherine', '1970-04-23', '15'),
        ('Mr', 'DURAND', 'Jean-Pierre', '1980-01-12', '5')
        """)

    # Lecture de toutes les personnes enregistrees
    nbPersons = cursor.execute("SELECT * FROM persons")

    # Affichage de messages d'informations
    print " * Ajout de %d personnes dans l'annuaire" % (nbPersons)
    print " * Liste des personnes inserees :"
    print "   mysql: SELECT * FROM persons"
    print "    > ID, Titre, Nom, Prenom, Naissance, Experience"

    # Extraction des donnees
    while True:
        # Lecture ligne par ligne
        row = cursor.fetchone()

        # si c'est la fin de la liste
        if row == None:
            break;

        # Affichage de la ligne
        print "    > %d, %s, %s, %s, %s, %d" % (row[0], row[1], row[2], row[3],
            row[4].strftime("%d/%m/%Y"), row[5])

    # Recherche d'une personne dans l'annuaire
    cursor.execute("SELECT * FROM persons WHERE ID >= 2")
    print " "
    print " * Recherche de personnes dans l'annuaire, avec ID >= 2 :"
    print "   mysql: SELECT * FROM persons WHERE ID >= 2"
    print "    > ID, Titre, Nom, Prenom, Naissance, Experience"

    # Extraction des donnees
    while True:
        # Lecture ligne par ligne
        row = cursor.fetchone()

        # si c'est la fin de la liste
        if row == None:
            break;

        # Affichage de la ligne
        print "    > %d, %s, %s, %s, %s, %d" % (row[0], row[1], row[2], row[3],
            row[4].strftime("%d/%m/%Y"), row[5])


    # Modification d'une personne dans l'annuaire
    cursor.execute("UPDATE persons SET name=\"LAPIERRE\" WHERE ID=2")
    print " "
    print " * Modification de la personne ID=2 dans l'annuaire :"
    print "   mysql: UPDATE persons SET name=\"LAPIERRE\" WHERE ID=2"
    print "    > ID, Titre, Nom, Prenom, Naissance, Experience"
    cursor.execute("SELECT * FROM persons WHERE ID = 2")

    # Extraction des donnees
    while True:
        # Lecture ligne par ligne
        row = cursor.fetchone()
    
        # si c'est la fin de la liste
        if row == None:
            break;
    
        # Affichage de la ligne
        print "    > %d, %s, %s, %s, %s, %d" % (row[0], row[1], row[2], row[3],
             row[4].strftime("%d/%m/%Y"), row[5])
    
    
    # Suppression d'une personne dans l'annuaire
    cursor.execute("DELETE FROM persons WHERE ID=3")
    print " "
    print " * Suppression de la personne ID=3 dans l'annuaire :"
    print "   mysql: DELETE FROM persons WHERE ID=3"
    print "    > ID, Titre, Nom, Prenom, Naissance, Experience"
    cursor.execute("SELECT * FROM persons")
    
    # Extraction des donnees
    while True:
        # Lecture ligne par ligne
        row = cursor.fetchone()
    
        # si c'est la fin de la liste
        if row == None:
            break;
    
        # Affichage de la ligne
        print "    > %d, %s, %s, %s, %s, %d" % (row[0], row[1], row[2],
            row[3], row[4].strftime("%d/%m/%Y"), row[5])
    
    # Fermeture du curseur de parcours de donnees
    cursor.close()
    
    # Fermeture de la connexion vers la base de donnees
    db.close()
