Python exploite la base de données MySQL
L'interface de base de données standard de Python est Python DB-API, qui fournit aux développeurs une interface de programmation d'applications de base de données.
L'interface de base de données Python prend en charge de nombreuses bases de données, vous pouvez choisir la base de données qui convient à votre projet :
GadFly
mSQL
MySQL
PostgreSQL
Microsoft SQL Server 2000
Informix
Interbase
Oracle
Sybase
Vous pouvez visiter l'interface et l'API de la base de données Python pour afficher une liste détaillée des bases de données prises en charge.
Vous devez télécharger différents modules API DB pour différentes bases de données. Par exemple, si vous devez accéder à la base de données Oracle et aux données Mysql, vous devez télécharger les modules de base de données Oracle et MySQL.
DB-API est une spécification. Elle définit une série d'objets et de méthodes d'accès à la base de données nécessaires pour fournir des interfaces d'accès cohérentes pour divers systèmes de base de données sous-jacents et divers programmes d'interface de base de données.
La DB-API de Python implémente des interfaces pour la plupart des bases de données. Après l'avoir utilisée pour vous connecter à chaque base de données, vous pouvez utiliser chaque base de données de la même manière.
Processus d'utilisation de Python DB-API :
Présentez le module API.
Obtenez la connexion à la base de données.
Exécuter des instructions SQL et des procédures stockées.
Fermez la connexion à la base de données.
Qu'est-ce que MySQLdb ?
MySQLdb est une interface permettant à Python de se connecter à la base de données Mysql. Elle implémente la spécification API de base de données Python V2.0 et est basée. sur MySQL C Construit sur API.
Comment installer MySQLdb ?
Afin d'écrire des scripts MySQL avec DB-API, vous devez vous assurer que MySQL est installé. Copiez le code suivant et exécutez-le :
#!/usr/bin/python # -*- coding: UTF-8 -*- import MySQLdb
Si le résultat après exécution est le suivant, cela signifie que vous n'avez pas installé le module MySQLdb :
Traceback (most recent call last): File "test.py", line 3, in <module> import MySQLdb ImportError: No module named MySQLdb
Pour installer MySQLdb, veuillez visiter http:/ /sourceforge.net/projects/mysql-python , (la plate-forme Linux peut accéder à : https://pypi.python.org/pypi/MySQL-python) À partir de là, vous pouvez choisir le package d'installation adapté à votre plate-forme, qui est divisé dans des fichiers binaires précompilés et le package d'installation du code source.
Si vous choisissez la version de distribution de fichiers binaires, le processus d'installation peut être complété avec des invites d'installation de base. Si vous installez à partir du code source, vous devez basculer vers le répertoire de niveau supérieur de la distribution MySQLdb et taper la commande suivante :
$ gunzip MySQL-python-1.2.2.tar.gz $ tar -xvf MySQL-python-1.2.2.tar $ cd MySQL-python-1.2.2 $ python setup.py build $ python setup.py install
Remarque : Veuillez vous assurer que vous disposez des autorisations root pour installer les modules ci-dessus.
Connexion à la base de données
Avant de vous connecter à la base de données, veuillez confirmer ce qui suit :
Vous avez créé la base de données TESTDB.
Dans la base de données TESTDB vous avez créé la table EMPLOYEE
Les champs de la table EMPLOYEE sont FIRST_NAME, LAST_NAME, AGE, SEX et REVENU.
Le nom d'utilisateur utilisé pour se connecter à la base de données TESTDB est "testuser" et le mot de passe est "test123". Vous pouvez le définir vous-même ou utiliser directement le nom d'utilisateur et le mot de passe root de la base de données Mysql. autorisation utilisateur Veuillez utiliser la commande Grant.
Le module Python MySQLdb a été installé sur votre machine.
Si vous n'êtes pas familier avec les instructions SQL, vous pouvez visiter notre didacticiel SQL de base
Exemples :
Les exemples suivants renvoient à Base de données TESTDB de Mysql :
#!/usr/bin/python # -*- coding: UTF-8 -*- import MySQLdb # 打开数据库连接 db = MySQLdb.connect("localhost","testuser","test123","TESTDB" ) # 使用cursor()方法获取操作游标 cursor = db.cursor() # 使用execute方法执行SQL语句 cursor.execute("SELECT VERSION()") # 使用 fetchone() 方法获取一条数据库。 data = cursor.fetchone() print "Database version : %s " % data # 关闭数据库连接 db.close()
Le résultat de l'exécution du script ci-dessus est le suivant :
Database version : 5.0.45
Créer une table de base de données
Si la connexion à la base de données existe, nous pouvons utilisez la méthode execute() pour créer la table de base de données Table, créez la table EMPLOYEE comme suit :
#!/usr/bin/python # -*- coding: UTF-8 -*- import MySQLdb # 打开数据库连接 db = MySQLdb.connect("localhost","testuser","test123","TESTDB" ) # 使用cursor()方法获取操作游标 cursor = db.cursor() # 如果数据表已经存在使用 execute() 方法删除表。 cursor.execute("DROP TABLE IF EXISTS EMPLOYEE") # 创建数据表SQL语句 sql = """CREATE TABLE EMPLOYEE ( FIRST_NAME CHAR(20) NOT NULL, LAST_NAME CHAR(20), AGE INT, SEX CHAR(1), INCOME FLOAT )""" cursor.execute(sql) # 关闭数据库连接 db.close()
Opération d'insertion de base de données
L'exemple suivant utilise l'instruction SQL INSERT pour insérer des enregistrements dans table EMPLOYÉ :
#!/usr/bin/python # -*- coding: UTF-8 -*- import MySQLdb # 打开数据库连接 db = MySQLdb.connect("localhost","testuser","test123","TESTDB" ) # 使用cursor()方法获取操作游标 cursor = db.cursor() # SQL 插入语句 sql = """INSERT INTO EMPLOYEE(FIRST_NAME, LAST_NAME, AGE, SEX, INCOME) VALUES ('Mac', 'Mohan', 20, 'M', 2000)""" try: # 执行sql语句 cursor.execute(sql) # 提交到数据库执行 db.commit() except: # Rollback in case there is any error db.rollback() # 关闭数据库连接 db.close()
Exemple ci-dessus Il peut également être écrit sous la forme suivante :
#!/usr/bin/python # -*- coding: UTF-8 -*- import MySQLdb # 打开数据库连接 db = MySQLdb.connect("localhost","testuser","test123","TESTDB" ) # 使用cursor()方法获取操作游标 cursor = db.cursor() # SQL 插入语句 sql = "INSERT INTO EMPLOYEE(FIRST_NAME, \ LAST_NAME, AGE, SEX, INCOME) \ VALUES ('%s', '%s', '%d', '%c', '%d' )" % \ ('Mac', 'Mohan', 20, 'M', 2000) try: # 执行sql语句 cursor.execute(sql) # 提交到数据库执行 db.commit() except: # 发生错误时回滚 db.rollback() # 关闭数据库连接 db.close()
Exemple :
Le code suivant utilise des variables pour transmettre des paramètres à l'instruction SQL :
.................................. user_id = "test123" password = "password" con.execute('insert into Login values("%s", "%s")' % \ (user_id, password)) ..................................
Opération de requête de base de données
Python interroge Mysql en utilisant la méthode fetchone() pour obtenir une seule donnée et la méthode fetchall() pour obtenir plusieurs données.
fetchone() : Cette méthode obtient le jeu de résultats de requête suivant. L'ensemble de résultats est un objet
fetchall() :Reçoit toutes les lignes de résultats renvoyées.
rowcount : Il s'agit d'une propriété en lecture seule et renvoie le nombre de lignes affectées après l'exécution de la méthode execute().
Exemple :
Interrogez toutes les données avec un champ de salaire supérieur à 1000 dans la table EMPLOYEE :
#!/usr/bin/python # -*- coding: UTF-8 -*- import MySQLdb # 打开数据库连接 db = MySQLdb.connect("localhost","testuser","test123","TESTDB" ) # 使用cursor()方法获取操作游标 cursor = db.cursor() # SQL 查询语句 sql = "SELECT * FROM EMPLOYEE \ WHERE INCOME > '%d'" % (1000) try: # 执行SQL语句 cursor.execute(sql) # 获取所有记录列表 results = cursor.fetchall() for row in results: fname = row[0] lname = row[1] age = row[2] sex = row[3] income = row[4] # 打印结果 print "fname=%s,lname=%s,age=%d,sex=%s,income=%d" % \ (fname, lname, age, sex, income ) except: print "Error: unable to fecth data" # 关闭数据库连接 db.close()
Les résultats de l'exécution du script ci-dessus sont les suivants :
fname=Mac, lname=Mohan, age=20, sex=M, income=2000
Opération de mise à jour de la base de données
L'opération de mise à jour est utilisée pour mettre à jour les données dans la table de données L'exemple suivant modifie tous les champs SEX de la table TESTDB en 'M'. , et le champ AGE s'incrémente de 1 :
#!/usr/bin/python # -*- coding: UTF-8 -*- import MySQLdb # 打开数据库连接 db = MySQLdb.connect("localhost","testuser","test123","TESTDB" ) # 使用cursor()方法获取操作游标 cursor = db.cursor() # SQL 更新语句 sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '%c'" % ('M') try: # 执行SQL语句 cursor.execute(sql) # 提交到数据库执行 db.commit() except: # 发生错误时回滚 db.rollback() # 关闭数据库连接 db.close()
Opération de suppression
L'opération de suppression est utilisée pour supprimer des données dans la table de données. L'exemple suivant montre la suppression de toutes les données. avec un ÂGE supérieur à 20 dans la table de données EMPLOYÉ :
#!/usr/bin/python # -*- coding: UTF-8 -*- import MySQLdb # 打开数据库连接 db = MySQLdb.connect("localhost","testuser","test123","TESTDB" ) # 使用cursor()方法获取操作游标 cursor = db.cursor() # SQL 删除语句 sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20) try: # 执行SQL语句 cursor.execute(sql) # 提交修改 db.commit() except: # 发生错误时回滚 db.rollback() # 关闭连接 db.close()
Exécuter les transactions
Le mécanisme de transaction peut assurer la cohérence des données.
Les transactions doivent avoir 4 attributs : atomicité, cohérence, isolation et durabilité. Ces quatre propriétés sont souvent appelées propriétés ACIDE.
Atomicité. Une transaction est une unité de travail indivisible. Toutes les opérations incluses dans la transaction sont soit effectuées, soit aucune.
Cohérence. Une transaction doit faire passer la base de données d'un état de cohérence à un autre. La cohérence et l'atomicité sont étroitement liées.
Isolement. L'exécution d'une transaction ne peut être perturbée par d'autres transactions. Autrement dit, les opérations et les données utilisées dans une transaction sont isolées des autres transactions simultanées et les transactions exécutées simultanément ne peuvent pas interférer les unes avec les autres.
Durabilité. La continuité, également connue sous le nom de permanence, signifie qu'une fois qu'une transaction est validée, les modifications apportées aux données de la base de données doivent être permanentes. Les opérations ou pannes ultérieures ne devraient avoir aucun impact sur celui-ci.
Les transactions Python DB API 2.0 fournissent deux méthodes de validation ou de restauration.
Exemple :
# SQL删除记录语句 sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20) try: # 执行SQL语句 cursor.execute(sql) # 向数据库提交 db.commit() except: # 发生错误时回滚 db.rollback()
Pour les bases de données prenant en charge les transactions, dans la programmation de base de données Python, lorsque le curseur est créé, une transaction de base de données invisible est automatiquement lancée.
La méthode commit() effectue toutes les opérations de mise à jour sur le curseur et la méthode rollback() annule toutes les opérations sur le curseur actuel. Chaque méthode démarre une nouvelle transaction.
Gestion des erreurs
L'API DB définit certaines erreurs et exceptions pour les opérations de base de données. Le tableau suivant répertorie ces erreurs et exceptions :
异常 | 描述 |
---|---|
Warning | 当有严重警告时触发,例如插入数据是被截断等等。必须是 StandardError 的子类。 |
Error | 警告以外所有其他错误类。必须是 StandardError 的子类。 |
InterfaceError | 当有数据库接口模块本身的错误(而不是数据库的错误)发生时触发。 必须是Error的子类。 |
DatabaseError | 和数据库有关的错误发生时触发。 必须是Error的子类。 |
DataError | 当有数据处理时的错误发生时触发,例如:除零错误,数据超范围等等。 必须是DatabaseError的子类。 |
OperationalError | 指非用户控制的,而是操作数据库时发生的错误。例如:连接意外断开、 数据库名未找到、事务处理失败、内存分配错误等等操作数据库是发生的错误。 必须是DatabaseError的子类。 |
IntegrityError | 完整性相关的错误,例如外键检查失败等。必须是DatabaseError子类。 |
InternalError | 数据库的内部错误,例如游标(cursor)失效了、事务同步失败等等。 必须是DatabaseError子类。 |
ProgrammingError | 程序错误,例如数据表(table)没找到或已存在、SQL语句语法错误、 参数数量错误等等。必须是DatabaseError的子类。 |
NotSupportedError | 不支持错误,指使用了数据库不支持的函数或API等。例如在连接对象上 使用.rollback()函数,然而数据库并不支持事务或者事务已关闭。 必须是DatabaseError的子类。 |