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


"""
    Programme pour tester les acces à une base de donnees de type MySQL en utilisant le module pyodbc.
"""


###############################################################################
# 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 pyodbc
import pyodbc


###############################################################################
# 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 = pyodbc.connect('DRIVER={MySQL};SERVER=localhost;PORT=3306;DATABASE=annuaire;UID=test;PWD=tempor;CHARSET=UTF8')
    
    # Creation d'un curseur de parcours de donnees
    cursor = db.cursor()
    
    # Suppression de la table si elle existe
    cursor.execute("DROP TABLE IF EXISTS persons")
    
    # Affichage de messages d'informations
    print ">>>> PyODBC <<<<"
    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
    cursor.execute("SELECT * FROM persons")
    nbPersons = 0
    for row in cursor:
        nbPersons += 1
    
    # 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()
