Latest web development tutorials

connexion de base de données MySQL python3

Dans cet article, nous présentons python3 utilisation PyMySQL se connecter à la base de données, et simple CRUD.

Qu'est-ce que PyMySQL?

PyMySQL pour une version du serveur MySQL de connexion de base de données dans Python3.x, python2 en cours d'utilisation mysqldb.

PyMySQL suivre spécification v2.0 API de base de données Python et contient la bibliothèque client MySQL-Python pur.


Installation PyMySQL

Avant d'utiliser PyMySQL, nous devons nous assurer PyMySQL installé.

PyMySQL Télécharger: https: //github.com/PyMySQL/PyMySQL.

Si pas déjà installé, nous pouvons utiliser la commande suivante pour installer la dernière version de PyMySQL:

$ pip install PyMySQL

Si votre système ne prend pas en charge la commande pip, vous pouvez utiliser le installé qui suit:

1, en utilisant la commande git pour télécharger le package d'installation (vous pouvez également télécharger manuellement):

$ git clone https://github.com/PyMySQL/PyMySQL
$ cd PyMySQL/
$ python3 setup.py install

2, si vous avez besoin de développer un numéro de version, vous pouvez utiliser la commande curl à installer:

$ # X.X 为 PyMySQL 的版本号
$ curl -L https://github.com/PyMySQL/PyMySQL/tarball/pymysql-X.X | tar xz
$ cd PyMySQL*
$ python3 setup.py install
$ # 现在你可以删除 PyMySQL* 目录

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

Le processus d'installation peut apparaître "ImportError: Aucun module setuptools nommé" message d'erreur, ce qui signifie que vous ne devez pas installer setuptools, vous pouvez accéder à https://pypi.python.org/pypi/setuptools trouver la méthode de chaque système d'installation.

installation de Linux Exemple:

$ wget https://bootstrap.pypa.io/ez_setup.py
$ python3 ez_setup.py

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/python3

import pymysql

# 打开数据库连接
db = pymysql.connect("localhost","testuser","test123","TESTDB" )

# 使用 cursor() 方法创建一个游标对象 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.5.20-log

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/python3

import pymysql

# 打开数据库连接
db = pymysql.connect("localhost","testuser","test123","TESTDB" )

# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()

# 使用 execute() 方法执行 SQL,如果表存在则删除
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")

# 使用预处理语句创建表
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/python3

import pymysql

# 打开数据库连接
db = pymysql.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:
   # 如果发生错误则回滚
   db.rollback()

# 关闭数据库连接
db.close()

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

#!/usr/bin/python3

import pymysql

# 打开数据库连接
db = pymysql.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)
   # 执行sql语句
   db.commit()
except:
   # 发生错误时回滚
   db.rollback()

# 关闭数据库连接
db.close()

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/python3

import pymysql

# 打开数据库连接
db = pymysql.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/python3

import pymysql

# 打开数据库连接
db = pymysql.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/python3

import pymysql

# 打开数据库连接
db = pymysql.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.

Exemples

# 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.