Latest web development tutorials

opérations de python de base de données MySQL

Python interface de base de données standard pour le Python DB-API, Python DB-API fournit une interface de programmation d'applications de base de données pour les développeurs.

interface de base de données Python supporte de très grandes bases de données, vous pouvez choisir votre projet de base de données:

  • Gadfly
  • mSQL
  • MySQL
  • PostgreSQL
  • Microsoft SQL Server 2000
  • Informix
  • Interbase
  • oracle
  • Sybase

Vous pouvez accéder à l' interface de base de données Python et API Voir la liste détaillée des bases de données prises en charge.

Différentes bases de données, vous aurez besoin de télécharger un module DB API différent, par exemple, vous avez besoin d'accéder à des bases de données Oracle et de données Mysql, vous devez télécharger le module Oracle et MySQL base de données.

DB-API est une spécification qui définit un ensemble d'objets et la base de données doit accéder au mode, afin de fournir une interface cohérente pour accéder à une grande variété de système de base de données sous-jacente et une variété de programme d'interface de base de données.

DB-API Python, pour la plupart de la base de données implémente l'interface, l'utiliser après la connexion de la base de données, vous pouvez utiliser de la même manière à chaque base de données.

Python DB-API en utilisant le processus:

  • L'introduction du module d'interface API.
  • Connectez-vous à une base de données.
  • Exécuter des instructions SQL et les procédures stockées.
  • Fermez la connexion à la base.

Qu'est-ce que MySQLdb?

MySQLdb est une interface pour la liaison de base de données Python Mysql, qui implémente le Python spécification API de base de données V2.0, basée sur la mise en place de l'API MySQL C.


Comment installer MySQLdb?

Pour écrire des scripts MySQL avec DB-API, vous devez vous assurer que vous avez installé MySQL. Copiez le code suivant, et l'exécuter:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

Si la sortie est la suivante après l'exécution, ce qui signifie que vous ne disposez pas de module de MySQLdb est installé:

Traceback (most recent call last):
  File "test.py", line 3, in <module>
    import MySQLdb
ImportError: No module named MySQLdb

Installer MySQLdb, visitez http://sourceforge.net/projects/mysql-python , (la plate - forme Linux peut être consulté: https://pypi.python.org/pypi/MySQL-python ) De là , choisissez votre plate - forme package d'installation, pré-compilée dans les binaires et package de code source.

Si vous sélectionnez la version de version binaire, le processus d'installation invite à terminer l'installation de base. Si l'installation à partir du code source, vous devez passer à MySQLdb répertoire de niveau supérieur de libération, et tapez 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

Note: Assurez - vous que vous disposez des privilèges de root pour installer les modules décrits ci - dessus.


Database Connectivity

Avant de se connecter à la base de données, assurez-vous que les éléments suivants:

  • Vous avez créé un TESTDB de base de données.
  • Dans la base de données TESTDB vous avez créé la table EMPLOYÉS
  • EMPLOYÉ champ de table FIRST_NAME, LAST_NAME, âge, sexe et REVENU.
  • Les utilisateurs se connectent à la base de données en utilisant TESTDB nommé "testuser", mot de passe "test123", vous pouvez définir votre propre nom et mot de passe directement ou utilisateur root, Mysql licence utilisateur de base de données, s'il vous plaît utilisez la commande Grant.
  • Sur votre machine déjà installé le module Python MySQLdb.
  • Si vous n'êtes pas familier avec l'instruction SQL, vous pouvez visiter notre base SQL tutoriel

exemple:

Les exemples suivants de lien de base de données Mysql TESTDB:

#!/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()

Mise en œuvre du script ci-dessus renvoie les résultats sont les suivants:

Database version : 5.0.45

Créer une table de base de données

Si la connexion de base de données existe, nous pouvons utiliser la méthode execute () pour créer des tables pour la base de données, créer un EMPLOYÉ tableau ci-après:

#!/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()

Insert de base de données

Les exemples suivants sont effectués à l'aide d'une instruction SQL INSERT pour insérer des enregistrements à la 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()

L'exemple ci-dessus peut également être écrite comme suit:

#!/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 passer des paramètres à une instruction SQL:

..................................
user_id = "test123"
password = "password"

con.execute('insert into Login values("%s", "%s")' % \
             (user_id, password))
..................................

requêtes de base de données

Python requête Mysql en utilisant la méthode fetchOne () pour obtenir une seule donnée en utilisant fetchall () pour obtenir une pluralité de données.

  • fetchOne (): Cette méthode obtient le prochain jeu de résultats de la requête.Le jeu de résultats est une cible
  • fetchall (): retourne le résultat à recevoir toutes les lignes.
  • rowcount: Ceci est un attribut de lecture seule, et renvoie l'exécution méthode execute () après le nombre de lignes affectées.

exemple:

salaire (salaire) champ de données de table Découvrez EMPLOYÉ est plus grand que tous de 1000:

#!/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 suivantes:

fname=Mac, lname=Mohan, age=20, sex=M, income=2000

mises à jour de base de données

Les données de mise à jour l'opération de mise à jour du tableau de données, les exemples suivants TestDB champ SEX de table toutes les modifications de 'M', champ AGE est incrémenté 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()

effacement

Supprimer les données de suppression des données de la table, l'exemple suivant montre supprimer les données de la AGE table employé est supérieur à 20, toutes les données:

#!/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()

Affaires exécutives

mécanisme de transaction pour assurer la cohérence des données.

Les services devraient avoir quatre propriétés: atomicité, cohérence, isolation, durabilité. Ces quatre propriétés sont souvent désignés comme les propriétés ACID.

  • Atomique (atomicité). Une transaction est une unité indivisible de travail, ces opérations sont inclus dans la transaction soit faire ou ne pas faire.
  • Cohérence (cohérence). Les services doivent être modifiés pour rendre la base de données d'un état cohérent à un autre état cohérent. La cohérence et l'atomicité sont étroitement liés.
  • Isolement (isolement). Exécuter une transaction ne peut pas être autre opérations interférences. C'est une opération de fonctionnement et l'utilisation d'autres concurrency de transaction de données interne est isolé et ne peut pas interférer avec l'autre entre les transactions individuelles exécutent simultanément.
  • (Persistent durabilité). Persistent également appelé permanent (permanence), cela signifie qu'une fois qu'une transaction est validée, changer ses données dans la base de données devrait être permanente. Les autres opérations suivantes ou son échec ne devrait avoir aucun impact.

Python DB API 2.0 transaction fournit deux méthodes valider ou annuler.

exemple:

# SQL删除记录语句
sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)
try:
   # 执行SQL语句
   cursor.execute(sql)
   # 向数据库提交
   db.commit()
except:
   # 发生错误时回滚
   db.rollback()

Pour la base de données transactionnelle, la programmation de base de données en Python, lorsque le curseur est établi, commence automatiquement une transaction invisible de base de données.

engager la méthode () pour toutes les mises à jour de la méthode curseur, rollback () pour faire reculer toutes les opérations du curseur. Chaque méthode a commencé une nouvelle entreprise.


Gestion des erreurs

DB API définit quelques erreurs et un fonctionnement anormal de la base de données, le tableau ci-dessous répertorie les erreurs et exceptions:

anormal description
avertissement Quand il y a un sérieux avertissement pour déclencher, telles que l'insertion de données est tronquée, et ainsi de suite. Il doit être une sous-classe de StandardError.
erreur Toutes les autres classes d'erreur autres que les avertissements. Il doit être une sous-classe de StandardError.
InterfaceError Se déclenche lorsque le module d'interface de base de données dispose de sa propre erreur (au lieu d'une base de données d'erreur) se produit. Il doit être une sous-classe d'erreur.
DatabaseError Trigger et les erreurs liées à la base de données. Il doit être une sous-classe d'erreur.
DataError Quand il y a une erreur de traitement de données a eu lieu lors du déclenchement, par exemple: division par zéro erreur, les données hors de portée, et ainsi de suite. Il doit être une sous-classe de DatabaseError.
OperationalError Elle se réfère à un contrôle non-utilisateur, mais l'erreur est survenue lors de la base de données. Par exemple: accidentellement débranchée, le nom de la base de données ne se trouve pas, la transaction échoue, l'erreur d'allocation de mémoire, etc. opérations erreur de base de données a eu lieu. Il doit être une sous-classe de DatabaseError.
IntegrityError les erreurs liées à l'intégrité, comme un chèque de clé étrangère échoue et similaires. Il doit être DatabaseError sous-classe.
InternalError erreur de base de données interne, comme un curseur (curseur) échoue, la synchronisation des transactions de défaillance et ainsi de suite. Il doit être DatabaseError sous-classe.
ProgrammingError erreurs de procédure, telles que la table de données (table) introuvable ou existe déjà, instruction SQL erreur de syntaxe, un numéro d'erreur de paramètres, et ainsi de suite. Il doit être une sous-classe de DatabaseError.
NotSupportedError Non pris en charge l'erreur, fait référence à l'utilisation de fonctions telles que l'API ou la base de données ne prend pas en charge. Par exemple, en utilisant .rollback sur la fonction objet de connexion (), mais la base de données ne prend pas en charge les transactions ou l'opération a été fermée. Il doit être une sous-classe de DatabaseError.