Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Python

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 −

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 −

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 −

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.

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 −

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.

Avertissement

Utilisé pour les problèmes non mortels. Doit sous-classer StandardError.

Erreur

Classe de base pour les erreurs. Doit sous-classer StandardError.

Erreur d'interface

Utilisé pour les erreurs dans le module de base de données, pas la base de données elle-même. Doit sous-classer Error.

Erreur de base de données

Utilisé pour les erreurs dans la base de données. Doit sous-classer Error.

Erreur de données

Sous-classe de DatabaseError qui fait référence aux erreurs dans les données.

Erreur opérationnelle

Sous-classe de DatabaseError qui fait référence à des erreurs telles que la perte d'une connexion à la base de données. Ces erreurs sont généralement hors du contrôle du script Python.

Erreur d'intégrité

Sous-classe de DatabaseError pour les situations qui porteraient atteinte à l'intégrité relationnelle, telles que les contraintes d'unicité ou les clés étrangères.

Erreur interne

Sous-classe de DatabaseError qui fait référence aux erreurs internes au module de base de données, comme un curseur qui n'est plus actif.

Erreur de programmation

Sous-classe de DatabaseError qui fait référence à des erreurs telles qu'un mauvais nom de table et d'autres choses qui peuvent vous être imputées en toute sécurité.

Erreur non prise en charge

Sous-classe de DatabaseError qui fait référence à la tentative d'appel de fonctionnalités non prises en charge.

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

  1. Types de données Python
  2. Opérateurs Python
  3. Instruction de passe Python
  4. Arguments de la fonction Python
  5. Dictionnaire Python
  6. Itérateurs Python
  7. Fermetures Python
  8. Date-heure Python
  9. Sommeil Python()