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


Comment me connecter à une base de données MySQL en utilisant un programme python?


972
2017-12-16 21:49


origine


Réponses:


Connexion à 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 paquet le plus utilisé pour le faire est MySQLdb mais il est difficile de l'installer en utilisant easy_install.

Pour l'utilisateur 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 (pour les distributions basées sur Debian), yum install MySQL-python (pour rpm-based), ou dnf install python-mysql (pour la distribution Fedora moderne) en ligne de commande à télécharger.)

Pour Mac, vous pouvez installez 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. Alors s'il vous plaît redémarrer.

Ensuite, 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]

db.close()

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

3 - Utilisation plus avancée

Une fois que vous savez comment cela fonctionne, vous pouvez utiliser un ORM pour éviter d'écrire SQL manuellement et de manipuler vos tables car elles étaient des objets Python. L'ORM le plus célèbre de la communauté Python est SQLAlchemy.

Je vous conseille fortement de l'utiliser: votre vie va être beaucoup plus facile.

J'ai récemment découvert un autre bijou dans le monde Python: Pee Wee. C'est un ORM très léger, vraiment facile et rapide à installer puis à 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 exagérée:

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

Cet exemple fonctionne hors de la boîte. Rien d'autre que d'avoir peewee (pip install peewee) est requis.


1128
2017-12-16 21:51



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 if writing
# In this case, we are only reading data
# db.commit()

# Get the number of rows in the resultset
numrows = cursor.rowcount

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

# Close the connection
db.close()

Référence ici


158
2018-05-28 15:39



Oracle (MySQL) prend désormais en charge un connecteur Python pur. Cela signifie qu'il n'y a pas de binaires à installer: c'est juste une bibliothèque Python. C'est ce qu'on appelle "Connector / Python".

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


105
2018-01-06 21:32



Si vous n'avez pas besoin de MySQLdb, mais que vous accepteriez n'importe quelle bibliothèque, je recommanderais très fortement MySQL Connector / Python de MySQL: http://dev.mysql.com/downloads/connector/python/.

C'est un paquet (environ 110k), pur Python, donc il est indépendant du système et simple à installer. Vous téléchargez, double-cliquez sur, confirmez le contrat de licence et partez. Il n'y a pas besoin de Xcode, MacPorts, compilation, redémarrage ...

Ensuite, vous vous connectez comme:

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

try:
   cursor = cnx.cursor()
   cursor.execute("""
      select 3 from your_table
   """)
   result = cursor.fetchall()
   print result
finally:
    cnx.close()

95
2017-12-29 02:52



Arrêtez d'utiliser MySQLDb si vous voulez éviter d'installer les en-têtes mysql juste pour accéder à mysql depuis python.

Utilisation pymysql. Il fait tout ce que MySQLDb fait, mais il a été implémenté purement en Python avec PAS de dépendances externes. Cela rend le processus d'installation sur tous les systèmes d'exploitation cohérent et facile. pymysql est une goutte de remplacement pour MySQLDb et IMHO il n'y a aucune raison de jamais utiliser MySQLDb pour quoi que ce soit ... JAMAIS! - PTSD from installing MySQLDb on Mac OSX and *Nix systemsmais c'est juste moi.

Installation

pip install pymysql

C'est tout ... vous êtes prêt à jouer.

Exemple d'utilisation de pymysql Github repo

import pymysql.cursors
import pymysql

# Connect to the database
connection = pymysql.connect(host='localhost',
                             user='user',
                             password='passwd',
                             db='db',
                             charset='utf8mb4',
                             cursorclass=pymysql.cursors.DictCursor)

try:
    with connection.cursor() as cursor:
        # Create a new record
        sql = "INSERT INTO `users` (`email`, `password`) VALUES (%s, %s)"
        cursor.execute(sql, ('webmaster@python.org', 'very-secret'))

    # connection is not autocommit by default. So you must commit to save
    # your changes.
    connection.commit()

    with connection.cursor() as cursor:
        # Read a single record
        sql = "SELECT `id`, `password` FROM `users` WHERE `email`=%s"
        cursor.execute(sql, ('webmaster@python.org',))
        result = cursor.fetchone()
        print(result)
finally:
    connection.close()

AUSSI - Remplacer MySQLdb dans le code existant rapidement et de manière transparente

Si vous avez du code qui utilise MySQLdb, vous pouvez facilement le remplacer par pymysql en utilisant ce processus simple:

# import MySQLdb << Remove this line and replace with:
import pymysql
pymysql.install_as_MySQLdb()

Toutes les références ultérieures à MySQLdb utiliseront pymysql de manière transparente.


85
2017-10-15 21:25



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

  • oursql a un paramétrage réel, envoyant le SQL et les données à MySQL complètement séparément.
  • oursql permet d'envoyer des données textuelles ou binaires dans la base de données et de les diffuser hors de la base de données, au lieu d'exiger que tout soit tamponné dans le client.
  • oursql peut à la fois insérer des lignes paresseusement et récupérer des lignes paresseusement.
  • oursql a le support unicode 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 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.


18
2017-12-16 21:52



Essayez d'utiliser MySQLdb

Il y a un comment faire page ici: http://www.kitebird.com/articles/pydbapi.html


De la page:

# server_version.py - retrieve and display database server version

import MySQLdb

conn = MySQLdb.connect (host = "localhost",
                        user = "testuser",
                        passwd = "testpass",
                        db = "test")
cursor = conn.cursor ()
cursor.execute ("SELECT VERSION()")
row = cursor.fetchone ()
print "server version:", row[0]
cursor.close ()
conn.close ()

17
2018-06-22 14:18



Malgré toutes les réponses ci-dessus, dans le cas où vous ne voulez pas vous connecter à une base de données spécifique à l'avance, par exemple, si vous voulez créer la base de données encore (!), Vous pouvez utiliser connection.select_db(database), comme démontré dans ce qui suit.

import pymysql.cursors
connection = pymysql.connect(host='localhost',
                         user='mahdi',
                         password='mahdi',
                         charset='utf8mb4',
                         cursorclass=pymysql.cursors.DictCursor)
cursor = connection.cursor()
cursor.execute("CREATE DATABASE IF NOT EXISTS "+database)
connection.select_db(database)
sql_create = "CREATE TABLE IF NOT EXISTS "+tablename+(timestamp DATETIME NOT NULL PRIMARY KEY)"
cursor.execute(sql_create)
connection.commit()
cursor.close()

11
2017-12-16 22:29



MySQLdb est le moyen simple. Vous pouvez exécuter des requêtes SQL via une connexion. Période.

Ma façon préférée, qui est aussi pythonique, est d'utiliser le puissant SQLAlchemy au lieu. Voici une requête liée tutoriel, et voici un tutoriel sur Capacités ORM de SQLALchemy.


8
2018-04-11 16:13