Pregunta ¿Cómo me conecto a una base de datos MySQL en Python?


¿Cómo me conecto a una base de datos MySQL usando un programa python?


972
2017-12-16 21:49


origen


Respuestas:


Conectando a MYSQL con Python en 3 pasos

1 - Configuración

Debe instalar un controlador MySQL antes de hacer cualquier cosa. A diferencia de PHP, solo el controlador SQLite se instala de manera predeterminada con Python. El paquete más usado para hacerlo es MySQLdb pero es difícil de instalar usando easy_install.

Para usuarios de Windows, puedes obtener un exe de MySQLdb.

Para Linux, este es un paquete informal (python-mysqldb). (Puedes usar sudo apt-get install python-mysqldb (para distros basados ​​en Debian), yum install MySQL-python (para rpm), o dnf install python-mysql (para la distribución moderna de fedora) en la línea de comando para descargar.)

Para Mac, puedes instalar MySQLdb usando Macport.

2 - Uso

Después de la instalación, reinicie. Esto no es obligatorio, pero me impedirá contestar 3 o 4 preguntas más en esta publicación si algo sale mal. Entonces, reinicia.

Entonces es como usar cualquier otro paquete:

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

Por supuesto, hay miles de posibilidades y opciones; este es un ejemplo muy básico. Tendrás que mirar la documentación. Un buen punto de partida.

3 - Uso más avanzado

Una vez que sepa cómo funciona, es posible que desee utilizar un ORM para evitar escribir SQL manualmente y manipular sus tablas, ya que eran objetos de Python. El ORM más famoso en la comunidad de Python es SQLAlchemy.

Le recomiendo encarecidamente que lo use: su vida será mucho más fácil.

Recientemente descubrí otra joya en el mundo de Python: peewee. Es un ORM muy ligero, muy fácil y rápido de configurar y luego usar. Hace que mi día sea para proyectos pequeños o aplicaciones independientes, donde usar grandes herramientas como SQLAlchemy o Django es excesivo:

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

Este ejemplo funciona de la caja. Nada más que tener peewee (pip install peewee) es requerido.


1128
2017-12-16 21:51



Aquí hay una manera de hacerlo:

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

Referencia aquí


158
2018-05-28 15:39



Oracle (MySQL) ahora es compatible con un conector Python puro. Eso significa que no hay binarios para instalar: es solo una biblioteca de Python. Se llama "Conector / Python".

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


105
2018-01-06 21:32



Si no necesita MySQLdb, pero aceptaría cualquier biblioteca, recomendaría muchísimo MySQL Connector / Python de MySQL: http://dev.mysql.com/downloads/connector/python/.

Es un paquete (alrededor de 110k), Python puro, por lo que es independiente del sistema y muy fácil de instalar. Simplemente descarga, haz doble clic, confirma el acuerdo de licencia y ve. No hay necesidad de Xcode, MacPorts, compilación, reinicio ...

Luego te conectas como:

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



Deje de utilizar MySQLDb si desea evitar la instalación de encabezados mysql solo para acceder a mysql desde python.

Utilizar pymysql. Hace todo lo que hace MySQLDb, pero fue implementado puramente en Python con NO dependencias externas. Esto hace que el proceso de instalación en todos los sistemas operativos sea consistente y fácil. pymysql es una gota en reemplazo de MySQLDb y en mi humilde opinión, no hay razón para usar MySQLDb para nada ... ¡SIEMPRE! - PTSD from installing MySQLDb on Mac OSX and *Nix systems, pero así soy yo.

Instalación

pip install pymysql

Eso es todo ... estás listo para jugar.

Ejemplo de uso 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()

TAMBIÉN - Reemplace MySQLdb en el código existente de forma rápida y transparente

Si tiene un código existente que utiliza MySQLdb, puede reemplazarlo fácilmente con pymysql usando este proceso simple:

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

Todas las referencias posteriores a MySQLdb utilizarán pymysql de forma transparente.


85
2017-10-15 21:25



Como un controlador de db, también hay oursql. Algunos de los motivos enumerados en ese enlace, que dicen por qué oursql es mejor:

  • oursql tiene una parametrización real, enviando el SQL y los datos a MySQL completamente por separado.
  • oursql permite que los datos de texto o binarios se transmitan a la base de datos y se transfieran de la base de datos, en lugar de requerir que todo se almacene en el cliente.
  • oursql puede insertar filas perezosamente y buscar filas perezosamente.
  • oursql tiene soporte Unicode por defecto.
  • oursql admite Python 2.4 a 2.7 sin advertencias de desactivación en 2.6+ (ver PEP 218) y sin fallar completamente en 2.7 (ver PEP 328).
  • oursql se ejecuta nativamente en python 3.x.

Entonces, ¿cómo conectarse a mysql con oursql?

Muy similar a 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]

los tutorial en la documentación es bastante decente

Y, por supuesto, para ORM SQLAlchemy es una buena opción, como ya se mencionó en las otras respuestas.


18
2017-12-16 21:52



Intenta usar MySQLdb

Hay una página de cómo hacerlo aquí: http://www.kitebird.com/articles/pydbapi.html


De la página:

# 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