1230 votes

Comment se connecter à une base de données MySQL en Python ?

Comment se connecter à une base de données MySQL à l'aide d'un programme python ?

1278voto

e-satis Points 146299

Se connecter à MYSQL avec Python en 3 étapes

1 - Réglage

Vous devez installer un pilote MySQL avant de faire quoi que ce soit. Contrairement à PHP, seul le pilote SQLite est installé par défaut avec Python. Le paquetage le plus utilisé pour ce faire est MySQLdb mais il est difficile de l'installer en utilisant easy_install.

Pour les utilisateurs de Windows, vous pouvez obtenir un exe de MySQLdb .

Pour Linux, il s'agit d'un paquet occasionnel (python-mysqldb). (Vous pouvez utiliser sudo apt-get install python-mysqldb en ligne de commande pour le télécharger).

Pour Mac, vous pouvez installer MySQLdb en utilisant Macport .

2 - Utilisation

Après l'installation, redémarrez. Ce n'est pas obligatoire, mais cela m'empêchera de répondre à 3 ou 4 autres questions dans ce post si quelque chose ne va pas. Donc, s'il vous plaît, redémarrez.

Dans ce cas, c'est comme si vous utilisiez un autre paquet :

#!/usr/bin/python
import MySQLdb

db = MySQLdb.connect(host="localhost", # your host, usually localhost
                     user="john", # your username
                      passwd="megajonhy", # your password
                      db="jonhydb") # name of the data base

# you must create a Cursor object. It will let
#  you execute all the queries you need
cur = db.cursor() 

# Use all the SQL you like
cur.execute("SELECT * FROM YOUR_TABLE_NAME")

# print all the first cell of all the rows
for row in cur.fetchall() :
    print row[0]

Bien sûr, il y a des milliers de possibilités et d'options, ceci est un exemple très basique. Vous devrez consulter la documentation. Un bon point de départ .

3 - Utilisation plus avancée

Une fois que vous saurez comment cela fonctionne, vous voudrez peut-être utiliser une ORM pour éviter d'écrire manuellement du SQL et manipuler vos tables comme des objets Python. L'ORM le plus connu dans la communauté Python est SQLAlchemy .

Je vous conseille vivement de l'utiliser : votre vie sera beaucoup plus facile.

J'ai récemment découvert un autre joyau dans le monde des Pythons : peewee . C'est un ORM très léger, très facile et rapide à configurer et à utiliser. Il fait ma journée pour les petits projets ou les applications autonomes, où l'utilisation de gros outils comme SQLAlchemy ou Django est excessive :

import peewee
from peewee import *

db = MySQLDatabase('jonhydb', user='john',passwd='megajonhy')

class Book(peewee.Model):
    author = peewee.CharField()
    title = peewee.TextField()

    class Meta:
        database = db

Book.create_table()
book = Book(author="me", title='Peewee is cool')
book.save()
for book in Book.filter(author="me"):
    print book.title

Peewee is cool

Cet exemple fonctionne dès le départ. Rien d'autre que le fait que peewee ( pip install peewee :-)) est nécessaire. Pas de configuration compliquée. C'est vraiment cool.

196voto

George Stocker Points 31258

Voici une façon de le faire.

#!/usr/bin/python
import MySQLdb

# connect
db = MySQLdb.connect(host="localhost", user="appuser", passwd="",
db="onco")

cursor = db.cursor()

# execute SQL select statement
cursor.execute("SELECT * FROM LOCATION")

# commit your changes
db.commit()

# get the number of rows in the resultset
numrows = int(cursor.rowcount)

# get and display one row at a time.
for x in range(0,numrows):
    row = cursor.fetchone()
    print row[0], "-->", row[1]

De ici .

134voto

Mr. Napik Points 735

Si vous n'avez pas besoin de MySQLdb, mais que vous acceptez n'importe quelle bibliothèque, je vous recommande vivement MySQL Connector/Python de MySQL : http://dev.mysql.com/downloads/connector/python/ .

Il s'agit d'un seul paquet (environ 110k), pur Python, donc indépendant du système, et très simple à installer. Il suffit de le télécharger, de double-cliquer, de confirmer l'accord de licence et c'est parti. Il n'y a pas besoin de Xcode, MacPorts, de compiler, de redémarrer

Puis vous vous connectez comme :

import mysql.connector    
cnx = mysql.connector.connect(user='scott', password='tiger',
                              host='127.0.0.1',
                              database='employees')
cnx.close()

127voto

Ken Brown Points 281

Oracle (MySQL) prend désormais en charge un connecteur Python pur. Cela signifie qu'il n'y a pas de binaires à installer : il s'agit simplement d'une bibliothèque Python. Elle s'appelle "Connector/Python".

http://dev.mysql.com/downloads/connector/python/

17voto

bool.dev Points 12840

En tant que conducteur de db, il y a aussi oursql . Certaines des raisons énumérées sur ce lien, qui disent pourquoi oursql est meilleur :

  • oursql dispose d'une réelle paramétrisation, envoyant le SQL et les données à MySQL de manière complètement séparée.
  • oursql permet d'introduire des données textuelles ou binaires dans la base de données et de les en extraire, au lieu d'exiger que tout soit mis en mémoire tampon dans le client.
  • oursql peut à la fois insérer des lignes paresseusement et récupérer des lignes paresseusement.
  • oursql a le support unicode activé par défaut.
  • oursql supporte python 2.4 à 2.7 sans aucun avertissement de dépréciation sur 2.6+ (voir PEP 218) et sans échouer complètement sur 2.7 (voir PEP 328).
  • oursql fonctionne nativement sur python 3.x.

Alors comment se connecter à mysql avec oursql ?

Très similaire à mysqldb :

import oursql

db_connection = oursql.connect(host='127.0.0.1',user='foo',passwd='foobar',db='db_name')
cur=db_connection.cursor()
cur.execute("SELECT * FROM `tbl_name`")
for row in cur.fetchall():
    print row[0]

Le site tutoriel dans la documentation est assez décent.

Et bien sûr pour ORM SQLAlchemy est un bon choix, comme déjà mentionné dans les autres réponses.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X