Python et bases de données

publicité
Python et bases de données
Khalid HOUSNI
Une base de données c'est quoi?




Une base de données (database en anglais) est un conteneur dans
lequel il est possible de stocker des données de façon structurée
Un langage standardisé -SQL- est dédié à cette structure et permet
aussi bien de faire des recherches mais aussi des modifications ou
des suppressions.
Les logiciels de gestion de bases de données les plus utilisées
aujourd'hui sont des SGBDR -Système de gestion de base de données
relationnelles-, c'est à dire que les données sont liées les unes aux
autres, par exemple on peut définir que si on supprime une
information, d'autres informations dépendantes de cette dernière
soient elles-aussi automatiquement supprimées. Cela garantit une
cohérence de données.
Il ne faut donc pas confondre une base de données qui est un
conteneur et le SGBDR qui est un logiciel de gestion de bases de
données.
SQLite

Utiliser le module SQLite


Pour importer le module SQLite: import sqlite3
Créer une base de données avec SQLite





Le paquet sqlite3 contient la méthode sqlite3.connect qui offre tous
les services de connections une base de données Sqlite
conn = sqlite3.connect('ma_base.db')
Lorsque vous exécuterez votre programme vous remarquerez que si la
base n'existe pas encore, un fichier sera crée dans le dossier de votre
programme. Et si celui-ci existe déjà il sera réutilisé.
Il est également possible de travailler avec une base de données de
manière temporaire: conn = sqlite3.connect(':memory:')
Pour fermer la connexion à la base de données on utilise : conn.close()
Créer une table avec SQLite
cursor = conn.cursor()
cursor.execute("""
CREATE TABLE IF NOT EXISTS users(
id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE,
name TEXT,
age INTERGER
)
""")
conn.commit()





TEXT : enregistre la donnée comme une chaine de caractères, sans limite de taille. Si un
nombre est entré dans une colonne de ce type, il sera automatiquement converti en une
chaine de caractères ;
NUMERIC : tente d'enregistrer la donnée comme un entier ou comme un réel, mais si cela
s'avère impossible, la donnée sera enregistrée comme une chaine de caractères ;
INTEGER : enregistre la donnée comme un entier si celle-ci peut être encodée sans perte,
mais peut utiliser les types REAL ou TEXT si ça ne peut être fait ;
REAL : enregistre la donnée comme un réel, même s'il s'agit d'un entier. Si la valeur est trop
grande, la donnée sera convertie en chaine de caractères ;
NONE : la donnée est enregistrée telle quelle, sans conversion.
Supprimer une table avec SQLite:
cursor = conn.cursor()
cursor.execute("""
DROP TABLE users
""")
conn.commit()
Insérer des données
cursor.execute("""
INSERT INTO users(name, age) VALUES(?, ?)
""", (“Housni", 36))
Vous pouvez passer par un dictionnaire:
data = {"name" : “Housni", "age" : 36}
cursor.execute(""" INSERT INTO users(name, age)
VALUES(:name, :age)""", data)
Insérer des données dans une table avec
SQLit
Vous pouvez récupérer l'id de la ligne que vous venez
d'insérer de cette manière:
 id = cursor.lastrowid
 Il est également possible de faire plusieurs insert en une
seule fois avec la fonction executemany:
users = []
users.append(("Housni", 36))
users.append((" Ayoubi", 60))
cursor.executemany(""" INSERT INTO users(name, age)
VALUES(?, ?)""", users)

Récupérer des données
Vous pouvez récupérer la première ligne correspondant à
votre recherche à l'aide de la fonction fetchone.
cursor.execute("""SELECT name, age FROM users""")
user1 = cursor.fetchone()
print(user1) # (‘Housni', 36)
 Vous pouvez récupérer plusieurs données de la même
recherche en utilisant la fonction fetchall().
cursor.execute("""SELECT id, name, age FROM users""")
rows = cursor.fetchall()
for row in rows:
print('{0} : {1} - {2}'.format(row[0], row[1], row[2]))

Récupérer des données
L'objet curseur fonctionne comme un itérateur, invoquant
la méthode fetchall() automatiquement:
cursor.execute("""SELECT id, name, age FROM users""")
for row in cursor:
print('{0} : {1}, {2}'.format(row[0], row[1], row[2]))
 Pour la recherche spécifique,on utilise la même logique vu
précédemment:
id = 2
cursor.execute("""SELECT id, name FROM users WHERE
id=?""", (id,))
response = cursor.fetchone()

Mettre à jour et supprimer des
enregistrements
Pour modifier des entrées on utilise la syntaxe suivante:
cursor.execute("""UPDATE users SET age = ? WHERE id =
?""", (20,3))

Pour supprimer un enregistrement dans une table on
utilise :
cursor.execute('''DELETE FROM users WHERE id = 2 ;''')

MySQL




MySQL est le logiciel idéal pour vos projets de sites web.
Contrairement à SQLite, il est nécessaire de l'installer et
de le configurer.
Il faut d’abord installer mysql-connector package ou
pymysql qui remplace cette dernière. Pour cela on
utilise l’instruction suivante:
pip install pymysql
Pour la mise à jour de la commande pip on utilise
pip install --upgrade pip
Connexion avec une base de données MySql

voici l'exemple de connexion avec la base de données
MySQL "TESTDB«
import pymysql
# Open database connection
db = pymysql .connect("localhost","root","","TESTDB" )
# prepare a cursor object using cursor() method
cursor = db.cursor() # execute SQL query using execute() method.
cursor.execute("SELECT VERSION()")
# Extraire une seule ligne à l'aide de la méthode fetchone ().
data = cursor.fetchone()
print ("Database version : %s " % data)
db.close()
# disconnect from server
Création d'une table dans MySql
import pymysql
# Open database connection
db = pymysql.connect("localhost","root","","TESTDB" )
# prepare a cursor object using cursor() method
cursor = db.cursor()
# Drop table if it already exist using execute() method.
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")
# Create table as per requirement
sql = """CREATE TABLE EMPLOYEE (
FIRST_NAME CHAR(20) NOT NULL,
LAST_NAME CHAR(20),
AGE INT,
SEX CHAR(1),
INCOME FLOAT )""" # REVENU
cursor.execute(sql)
db.commit()
# disconnect from server
db.close()
L’opération commit() et rollback()

Commit est l'opération, qui donne un signal vert à la base
de données pour finaliser les changements, et après cette
opération, aucun changement ne peut être renvoyé.

Si vous n'êtes pas satisfait d'un ou de plusieurs des
changements et que vous souhaitez rétablir ces
modifications complètement, utilisez la méthode rollback().
Opération d’insertion
import pymysql
# Open database connection
db = pymysql.connect("localhost","root","","TESTDB" )
# prepare a cursor object using cursor() method
cursor = db.cursor()
sql = """INSERT INTO EMPLOYEE(
FIRST_NAME, LAST_NAME, AGE, SEX, INCOME)
VALUES (‘Yazidi', ‘Abdelwahid', 26, 'M', 7000)"""
cursor.execute(sql)
db.commit()
# disconnect from server
db.close()
L'exemple ci-dessus peut être écrit comme suit pour créer des requêtes
SQL dynamique
import pymysql
# Open database connection
db = pymysql.connect("localhost","root","","TESTDB" )
# prepare a cursor object using cursor() method
cursor = db.cursor()
sql = "INSERT INTO EMPLOYEE(FIRST_NAME, \
LAST_NAME, AGE, SEX, INCOME) \
VALUES ('%s', '%s', '%d', '%c', '%d' )" % \
(‘Yazidi', ‘Abdelwahid', 26, 'M', 7000)
cursor.execute(sql)
db.commit()
# disconnect from server
db.close()

L’opération de lecture d’une base de
données

Une fois que notre connexion à la base de données est établie,
vous êtes prêt à effectuer une requête dans cette base de
données.Vous pouvez utiliser la méthode fetchone () pour
extraire une valeur unique ou fetchall () pour extraire
plusieurs valeurs d'une table de base de données.



fetchone (): Il récupère la ligne suivante d'un ensemble de résultats
de requête. Un ensemble de résultats est un objet renvoyé lorsqu'un
objet curseur est utilisé pour interroger une table.
fetchall (): Il récupère toutes les lignes d'un jeu de résultats. Si
certaines lignes ont déjà été extraites du jeu de résultats, elles
récupèrent les lignes restantes du jeu de résultats.
rowcount: Il s'agit d'un attribut en lecture seule et renvoie le nombre
de lignes affectées par une méthode execute ().
Exemple de section de données
sql = "SELECT * FROM EMPLOYEE \
WHERE INCOME > '%d'" % (1000)
try:
# Execute the SQL command
cursor.execute(sql)
# Fetch all the rows in a list of lists.
results = cursor.fetchall()
for row in results:
fname = row[0]
lname = row[1]
age = row[2]
sex = row[3]
income = row[4]
# Now print fetched result
print ("fname=%s,lname=%s,age=%d,sex=%s,income=%d" % \
(fname, lname, age, sex, income ))
except:
print ("Error: unable to fecth data")
L’opération de mise à jour
# Prepare SQL query to UPDATE required records
sql = "UPDATE EMPLOYEE SET AGE = AGE + 1
WHERE SEX = '%c'" % ('M')
try:
# Execute the SQL command
cursor.execute(sql)
# Commit your changes in the database
db.commit()
except:
# Rollback in case there is any error
db.rollback()
L’opération de suppression
sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)
try:
# Execute the SQL command
cursor.execute(sql)
# Commit your changes in the database
db.commit()
except:
# Rollback in case there is any error
db.rollback()
Bibliographie


http://apprendre-python.com/page-database-data-basedonnees-query-sql-mysql-postgre-sqlite
https://www.tutorialspoint.com/python3/python_database
_access.htm
Téléchargement