### Présentation des bdd par python : manipulation du module sqlite3

import sqlite3

import os

os.chdir('F:/IPT_MP/BDD_Par_Python')

ma_base=sqlite3.connect('une_base.db')

curseur=ma_base.cursor()

### exécution de commandes SQL  proprement dites : création de lignes

try :
    curseur.execute(""" DROP TABLE formes ;""") # pour supprimer une table lorsque celle-ci existe déjà
except :
    pass
curseur.execute(""" CREATE TABLE IF NOT EXISTS formes(
            id INTEGER PRIMARY KEY,
            formes TEXT,
            nbre_cotes INTEGER);""")

curseur.execute(""" INSERT INTO formes VALUES(1,"carré",4);""")
curseur.execute(""" INSERT INTO formes VALUES(2,"losange",4);""")
curseur.execute(""" INSERT INTO formes VALUES(3,"rectangle",4);""")
curseur.execute(""" INSERT INTO formes VALUES(4,"segment",1);""")
curseur.execute(""" INSERT INTO formes VALUES(5,"triangle",3);""")
curseur.execute(""" INSERT INTO formes VALUES(6,"pentagone",5);""")
curseur.execute(""" INSERT INTO formes VALUES(7,"hexagone",6);""")
curseur.execute(""" INSERT INTO formes VALUES(8,"cercle",NULL);""")
curseur.execute(""" INSERT INTO formes VALUES(9,"ellipse",NULL);""")
curseur.execute(""" INSERT INTO formes VALUES(10,"point",0);""")

# on peut aussi utiliser cette syntaxe en incrémentant automatiquement les identifiants de clé primaire

curseur.execute('''INSERT INTO formes VALUES (?,?,?);''', ((curseur.lastrowid + 1), "octogone", 8))


ma_base.commit()

### exécution de commandes SQL  proprement dites : accès aux données

curseur.execute(""" SELECT * FROM formes ;""")
premiere_ligne=curseur.fetchone()
# print(premiere_ligne)
curseur.execute(""" SELECT * FROM formes ;""")
lignes=curseur.fetchall()
# print(lignes)

# curseur.execute(""" SELECT * FROM formes WHERE nbre_cotes>5 ;""")
# reponse=curseur.fetchall()
# for ligne in reponse :
#     print("Le polygone nommé", ligne[1]," a ", ligne[2]," côtés.")

curseur.execute(""" SELECT COUNT(*),nbre_cotes FROM formes GROUP BY nbre_cotes ;""")
reponse=curseur.fetchall()
for ligne in reponse :
    print(ligne)

ma_base.commit()

