Python - Accès à la base de données MySQL
Page PrécédentePage Suivante
La norme Python pour les interfaces de base de données est Python DB-API. La plupart des interfaces de base de données Python adhèrent à cette norme.
Vous pouvez choisir la bonne base de données pour votre application. L'API de base de données Python prend en charge une large gamme de serveurs de base de données tels que −
- Taon
- mSQL
- MySQL
- PostgreSQL
- Microsoft SQL Server 2000
- Informix
- Interbase
- Oracle
- Sybase
Voici la liste des interfaces de base de données Python disponibles :Interfaces et API de base de données Python. Vous devez télécharger un module DB API distinct pour chaque base de données à laquelle vous devez accéder. Par exemple, si vous avez besoin d'accéder à une base de données Oracle ainsi qu'à une base de données MySQL, vous devez télécharger les modules de base de données Oracle et MySQL.
L'API DB fournit une norme minimale pour travailler avec des bases de données en utilisant les structures et la syntaxe Python dans la mesure du possible. Cette API comprend les éléments suivants −
- Importation du module API.
- Acquérir une connexion avec la base de données.
- Émission d'instructions SQL et de procédures stockées
- Fermer la connexion
Nous apprendrions tous les concepts en utilisant MySQL, alors parlons du module MySQLdb.
Qu'est-ce que MySQLdb ?
MySQLdb est une interface permettant de se connecter à un serveur de base de données MySQL à partir de Python. Il implémente l'API Python Database v2.0 et repose sur l'API MySQL C.
Comment installer MySQLdb ?
Avant de continuer, assurez-vous que MySQLdb est installé sur votre machine. Tapez simplement ce qui suit dans votre script Python et exécutez-le −
#!/usr/bin/python import MySQLdb
S'il produit le résultat suivant, cela signifie que le module MySQLdb n'est pas installé −
Traceback (most recent call last): File "test.py", line 3, in <module> import MySQLdb ImportError: No module named MySQLdb
Pour installer le module MySQLdb, utilisez la commande suivante −
For Ubuntu, use the following command - $ sudo apt-get install python-pip python-dev libmysqlclient-dev For Fedora, use the following command - $ sudo dnf install python python-devel mysql-devel redhat-rpm-config gcc For Python command prompt, use the following command - pip install MySQL-python
Remarque − Assurez-vous que vous disposez des privilèges root pour installer le module ci-dessus.
Connexion à la base de données
Avant de vous connecter à une base de données MySQL, assurez-vous des points suivants −
-
Vous avez créé une base de données TESTDB.
-
Vous avez créé une table EMPLOYEE dans TESTDB.
-
Ce tableau comporte des champs FIRST_NAME, LAST_NAME, AGE, SEX et INCOME.
-
L'ID utilisateur "testuser" et le mot de passe "test123" sont définis pour accéder à TESTDB.
-
Le module Python MySQLdb est correctement installé sur votre machine.
-
Vous avez suivi le didacticiel MySQL pour comprendre les bases de MySQL.
Exemple
Voici l'exemple de connexion avec la base de données MySQL "TESTDB"
#!/usr/bin/python import MySQLdb # Open database connection db = MySQLdb.connect("localhost","testuser","test123","TESTDB" ) # prepare a cursor object using cursor() method cursor = db.cursor() # execute SQL query using execute() method. cursor.execute("SELECT VERSION()") # Fetch a single row using fetchone() method. data = cursor.fetchone() print "Database version : %s " % data # disconnect from server db.close()
Lors de l'exécution de ce script, il produit le résultat suivant sur ma machine Linux.
Database version : 5.0.45
Si une connexion est établie avec la source de données, un objet de connexion est renvoyé et enregistré dans db pour une utilisation ultérieure, sinon db est défini sur Aucun. Ensuite, db l'objet est utilisé pour créer un curseur objet, qui à son tour est utilisé pour exécuter des requêtes SQL. Enfin, avant de sortir, il s'assure que la connexion à la base de données est fermée et que les ressources sont libérées.
Création d'une table de base de données
Une fois qu'une connexion à la base de données est établie, nous sommes prêts à créer des tables ou des enregistrements dans les tables de la base de données en utilisant exécuter méthode du curseur créé.
Exemple
Créons la table de base de données EMPLOYEE −
#!/usr/bin/python import MySQLdb # Open database connection db = MySQLdb.connect("localhost","testuser","test123","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 )""" cursor.execute(sql) # disconnect from server db.close()
Opération INSÉRER
Il est requis lorsque vous souhaitez créer vos enregistrements dans une table de base de données.
Exemple
L'exemple suivant exécute SQL INSERT instruction pour créer un enregistrement dans la table EMPLOYEE −
#!/usr/bin/python import MySQLdb # Open database connection db = MySQLdb.connect("localhost","testuser","test123","TESTDB" ) # prepare a cursor object using cursor() method cursor = db.cursor() # Prepare SQL query to INSERT a record into the database. sql = """INSERT INTO EMPLOYEE(FIRST_NAME, LAST_NAME, AGE, SEX, INCOME) VALUES ('Mac', 'Mohan', 20, 'M', 2000)""" 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() # disconnect from server db.close()
L'exemple ci-dessus peut être écrit comme suit pour créer dynamiquement des requêtes SQL −
#!/usr/bin/python import MySQLdb # Open database connection db = MySQLdb.connect("localhost","testuser","test123","TESTDB" ) # prepare a cursor object using cursor() method cursor = db.cursor() # Prepare SQL query to INSERT a record into the database. sql = "INSERT INTO EMPLOYEE(FIRST_NAME, \ LAST_NAME, AGE, SEX, INCOME) \ VALUES ('%s', '%s', '%d', '%c', '%d' )" % \ ('Mac', 'Mohan', 20, 'M', 2000) 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() # disconnect from server db.close()
Exemple
Le segment de code suivant est une autre forme d'exécution où vous pouvez passer directement des paramètres −
.................................. user_id = "test123" password = "password" con.execute('insert into Login values("%s", "%s")' % \ (user_id, password)) ..................................
Opération READ
READ L'opération sur n'importe quelle base de données signifie récupérer des informations utiles de la base de données.
Une fois notre connexion à la base de données établie, vous êtes prêt à effectuer une requête dans cette base de données. Vous pouvez utiliser soit fetchone() méthode pour récupérer un seul enregistrement ou fetchall() méthode pour extraire plusieurs valeurs d'une table de base de données.
-
récupérer() − Il récupère la ligne suivante d'un ensemble de résultats de requête. Un jeu de résultats est un objet renvoyé lorsqu'un objet curseur est utilisé pour interroger une table.
-
récupérer() − 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, il récupère les lignes restantes du jeu de résultats.
-
nombre de lignes − Ceci est un attribut en lecture seule et renvoie le nombre de lignes qui ont été affectées par une méthode execute().
Exemple
La procédure suivante interroge tous les enregistrements de la table EMPLOYEE ayant un salaire supérieur à 1000 −
#!/usr/bin/python import MySQLdb # Open database connection db = MySQLdb.connect("localhost","testuser","test123","TESTDB" ) # prepare a cursor object using cursor() method cursor = db.cursor() 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" # disconnect from server db.close()
Cela produira le résultat suivant −
fname=Mac, lname=Mohan, age=20, sex=M, income=2000
Opération de mise à jour
UPDATE L'opération sur n'importe quelle base de données signifie mettre à jour un ou plusieurs enregistrements, qui sont déjà disponibles dans la base de données.
La procédure suivante met à jour tous les enregistrements ayant SEX comme 'M' . Ici, nous augmentons l'ÂGE de tous les mâles d'un an.
Exemple
#!/usr/bin/python import MySQLdb # Open database connection db = MySQLdb.connect("localhost","testuser","test123","TESTDB" ) # prepare a cursor object using cursor() method cursor = db.cursor() # 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() # disconnect from server db.close()
Opération SUPPRIMER
L'opération DELETE est requise lorsque vous souhaitez supprimer certains enregistrements de votre base de données. Voici la procédure pour supprimer tous les enregistrements de EMPLOYEE où AGE est supérieur à 20 −
Exemple
#!/usr/bin/python import MySQLdb # Open database connection db = MySQLdb.connect("localhost","testuser","test123","TESTDB" ) # prepare a cursor object using cursor() method cursor = db.cursor() # Prepare SQL query to DELETE required records 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() # disconnect from server db.close()
Effectuer des transactions
Les transactions sont un mécanisme qui assure la cohérence des données. Les transactions ont les quatre propriétés suivantes −
-
Anomicité − Soit une transaction se termine, soit rien ne se passe du tout.
-
Cohérence − Une transaction doit commencer dans un état cohérent et laisser le système dans un état cohérent.
-
Isolement − Les résultats intermédiaires d'une transaction ne sont pas visibles en dehors de la transaction en cours.
-
Durabilité − Une fois qu'une transaction a été validée, les effets sont persistants, même après une panne du système.
L'API Python DB 2.0 fournit deux méthodes pour soit commit ou rollback une transaction.
Exemple
Vous savez déjà comment mettre en œuvre des transactions. Voici encore un exemple similaire −
# Prepare SQL query to DELETE required records 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()
Opération COMMIT
Commit est l'opération, qui donne un signal vert à la base de données pour finaliser les modifications, et après cette opération, aucune modification ne peut être annulée.
Voici un exemple simple pour appeler commit méthode.
db.commit()
Opération ROLLBACK
Si vous n'êtes pas satisfait d'une ou plusieurs des modifications et que vous souhaitez annuler complètement ces modifications, utilisez alors rollback() méthode.
Voici un exemple simple pour appeler rollback() méthode.
db.rollback()
Déconnexion de la base de données
Pour déconnecter la connexion à la base de données, utilisez la méthode close().
db.close()
Si la connexion à une base de données est fermée par l'utilisateur avec la méthode close(), toutes les transactions en cours sont annulées par la base de données. Cependant, au lieu de dépendre de l'un des détails d'implémentation de niveau inférieur de la base de données, votre application ferait mieux d'appeler explicitement commit ou rollback.
Gestion des erreurs
Il existe de nombreuses sources d'erreurs. Quelques exemples sont une erreur de syntaxe dans une instruction SQL exécutée, un échec de connexion ou l'appel de la méthode d'extraction pour un descripteur d'instruction déjà annulé ou terminé.
L'API DB définit un certain nombre d'erreurs qui doivent exister dans chaque module de base de données. Le tableau suivant répertorie ces exceptions.
Sr.No. | Exception et description |
---|---|
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 |
Vos scripts Python doivent gérer ces erreurs, mais avant d'utiliser l'une des exceptions ci-dessus, assurez-vous que votre MySQLdb prend en charge cette exception. Vous pouvez obtenir plus d'informations à leur sujet en lisant la spécification DB API 2.0.
Python