¿Cómo me puedo conectar a MySQL en Python 3 en Windows?

145

Estoy usando ActiveState Python 3 en Windows y quería conectarme a mi base de datos MySQL. Escuché que ese mysqldbera el módulo a usar. No puedo encontrar mysqldbpara Python 3.

¿Hay un repositorio disponible donde existen los binarios mysqldb? ¿Cómo me puedo conectar a MySQL en Python 3 en Windows?

panofish
fuente
Gracias a casevh por el enlace a los binarios no oficiales, pero estaba demasiado impaciente y parece que las masas todavía están usando python2 ... así que instalé python 2.7 e instalé MySQLdb de codegood.com/archives/129
panofish
1
posible duplicado de MySQL-db lib para Python 3.0?
itsadok
1
Cada vez que escribo pip, mi estómago se revuelve. 7 años y contando.
Ska

Respuestas:

274

Actualmente hay algunas opciones para usar Python 3 con mysql:

https://pypi.python.org/pypi/mysql-connector-python

  • Oficialmente respaldado por Oracle
  • Pitón puro
  • Un poco lento
  • No es compatible con MySQLdb

https://pypi.python.org/pypi/pymysql

  • Pitón puro
  • Más rápido que el conector mysql
  • Casi completamente compatible con MySQLdb, después de llamarpymysql.install_as_MySQLdb()

https://pypi.python.org/pypi/cymysql

  • horquilla de pymysql con aceleraciones C opcionales

https://pypi.python.org/pypi/mysqlclient

  • Biblioteca recomendada de Django.
  • Tenedor amigable del MySQLdb original, espera fusionarse algún día
  • La implementación más rápida, ya que está basada en C.
  • El más compatible con MySQLdb, ya que es una bifurcación
  • Debian y Ubuntu lo usan para proporcionar ambos python-mysqldby python3-mysqldbpaquetes.

puntos de referencia aquí: https://github.com/methane/mysql-driver-benchmarks

Collin Anderson
fuente
26
pip install mysqlclient solo funcionó para mí! Gracias por la lista completa de opciones.
ILMostro_7
44
mysqlclientAcabo de trabajar para mi instalación Python3.4 + Django + Passenger + Dreamhost.
ryanjdillon
Ubuntu tiene mysqlclient Debian no
ManuelSchneid3r
Parece que mysqlclient está en debian testingcomo python3-mysqldb, pero no está en stable. Así será en la próxima versión.
Collin Anderson el
para instalar el conector mysql en ubuntu puede usar un apt comosudo apt-get install python3-mysql.connector
peiman F.
67

Probablemente deberías usar pymysql - cliente puro Python MySQL en su lugar.
Funciona con Python 3.x, y no tiene dependencias.

Este cliente MySQL puro de Python proporciona una DB-API a una base de datos MySQL hablando directamente al servidor a través del protocolo binario cliente / servidor.

Ejemplo:

import pymysql
conn = pymysql.connect(host='127.0.0.1', unix_socket='/tmp/mysql.sock', user='root', passwd=None, db='mysql')
cur = conn.cursor()
cur.execute("SELECT Host,User FROM user")
for r in cur:
    print(r)
cur.close()
conn.close()
Oleh Prypin
fuente
14
desafortunadamente es una biblioteca CERO documentada que simplemente no funciona
o0 '.
77
@Lohoris: ¿Cómo es que lo estoy usando sin ningún problema?
Oleh Prypin
No he podido instalar esto en Windows 7 con Python 3.x. Alguien sabe como?
Paul
3
Python versión 3.3.1 aquí y no se instala. Se queja de la falta del módulo llamado constants.
Pijusn
@Pius Porque lo estás haciendo mal. Acabo de comprobar y funciona.
Oleh Prypin
7

También intenté usar pymysql (en mi máquina Win7 x64, Python 3.3), sin demasiada suerte. Descargué el extracto de .tar.gz, ejecuté "setup.py install" y todo parecía estar bien. Hasta que intenté conectarme a una base de datos y obtuve "KeyError [56]". Un error que no pude encontrar documentado en ninguna parte.

Así que renuncié a pymysql y me decidí por el conector Oracle MySQL .

Viene como un paquete de instalación y funciona de fábrica. Y también parece decentemente documentado.

Bogd
fuente
Estaba usando MySQLdb y eso funciona muy bien, pero claramente, esperaría que esto se convierta en el estándar de facto con el tiempo.
panofish
6

si desea usar MySQLdb primero, debe instalar pymysql en su PC escribiendo cmd de windows

    pip install pymysql

luego en Python Shell, escriba

    import pymysql
    pymysql.install_as_MySQLdb()
    import MySQLdb
    db = MySQLdb.connect("localhost" , "root" , "password")

Esto establecerá la conexión.

Hoyuelo
fuente
5

Resumen

Mysqlclient es la mejor alternativa (en mi humilde opinión) porque funciona perfectamente con Python 3+ , sigue las convenciones esperadas (a diferencia del conector mysql), usa el nombre de objeto mysqldb que permite portar convenientemente el software existente y es usado por Django para las compilaciones de Python 3

¿Hay un repositorio disponible donde existan los binarios para mysqldb?

Si. mysqlclient le permite usar funciones mysqldb. Sin embargo, recuerde que esto no es un puerto directo de mysqldb, sino una compilación de mysqlclient

¿Cómo me puedo conectar a MySQL en Python 3 en Windows?

pip install mysqlclient

Ejemplo

#!/Python36/python
#Please change above path to suit your platform.  Am running it on Windows
import MySQLdb
db = MySQLdb.connect(user="my-username",passwd="my-password",host="localhost",db="my-databasename")
cursor = db.cursor()
cursor.execute("SELECT * from my-table-name")
data=cursor.fetchall()
for row in data :
    print (row)
db.close()

No puedo encontrar mysqldb para Python 3.

mysqldb aún no ha sido portado

Rahul
fuente
4

PyMySQL también proporciona una interfaz similar a MySQLDb. Podrías intentar en tu inicialización:

import pymysql
pymysql.install_as_MySQLdb()

También hay un puerto de mysql-python en github para python3.

https://github.com/davispuh/MySQL-for-Python-3

sagarchalise
fuente
1

En mi Mac OS Maverick, intento esto:

Después de eso, ingrese el intérprete de python3 y escriba:

  1. importar pymysql . Si no hay ningún error, su instalación está bien. Para la verificación, escriba un script para conectarse a mysql con este formulario:

  2. # un script simple para la importación de la conexión MySQL pymysql db = pymysql.connect (host = "localhost", user = "root", passwd = "* ", db =" biblioteca ") # Claro, esta es información para mi db # cerrar la conexión db.close () *

Déle un nombre ("con.py" por ejemplo) y guárdelo en el escritorio. En Terminal escriba "cd desktop" y luego $ python con.py Si no hay ningún error, está conectado con el servidor MySQL. ¡Buena suerte!

duke2909
fuente
0

Esto no responde completamente a mi pregunta original, pero creo que es importante que todos sepan lo que hice y por qué.

Elegí continuar usando Python 2.7 en lugar de Python 3 debido a la prevalencia de 2.7 ejemplos y módulos en la web en general.

Ahora uso mysqldb y mysql.connector para conectarme a MySQL en Python 2.7. Ambos son geniales y funcionan bien. Sin embargo, creo que mysql.connector es en última instancia mejor a largo plazo.

panofish
fuente
Tengo curiosidad si todavía estás usando Python 2.7. En general, creo que es realmente importante hacer la transición a Python 3, y me ha sorprendido ver a tantos programadores optando por Python 2.7 para nuevos proyectos. ¿Cómo salieron las cosas?
vy32
@ vy32 Creo que los desarrolladores que eligen py27 podrían sorprenderle menos si considera que muchos sistemas operativos de servidor no son compatibles directamente con Python 3. Red Hat Enterprise Linux todavía se incluía con Python 2.6 hasta la versión más reciente, e incluso esa solo tiene py27.
coredumperror
Otra razón para usar Python 2.7 es porque Maya (que admite Python) usa 2.7 internamente. Por cierto ... si también necesita conectarse a MySQL a través de Python en Maya ... use el conector MySQL puro de Python.
panofish
0

Estoy usando cymysql con python3 en una frambuesa pi. Simplemente instalé: sudo pip3 install cython sudo pip3 install cymysql donde cython no es necesario pero debería hacer que cymysql sea más rápido

Hasta ahora funciona de maravilla y muy similar a MySQLdb

Jaco
fuente
0

Este es un tutorial rápido sobre cómo hacer que Python 3.7 funcione con Mysql.
Gracias a todos de quienes obtuve respuestas a mis preguntas
. Espero que esto ayude a alguien algún día.
-------------------------------------------------- -
Mi sistema:
versión de Windows: Pro de 64 bits

REQUISITOS ... descargue e instale estos primero ...
1. Descargue Xampp ..
https://www.apachefriends.org/download.html
2. Descargue Python
https://www.python.org/downloads/windows/

- ------------
// MÉTODO
--------------
Instale xampp primero después de terminar la instalación - instale Python 3.7.
Una vez que termine de instalar ambos, reinicie su sistema Windows.
Ahora inicie xampp y desde el panel de control: inicie el servidor mysql.
Confirme las versiones abriendo CMD y en el tipo de terminal

c:\>cd c:\xampp\mysql\bin

c:\xampp\mysql\bin>mysql -h localhost -v
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 10.1.21-MariaDB mariadb.org binary distribution

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Esto es para verificar la versión MYSQL

c:\xampp\mysql\bin>python
Python 3.7.0b3 (v3.7.0b3:4e7efa9c6f, Mar 29 2018, 18:42:04) [MSC v.1913 64 bit (AMD64)] on win32

Esto es para verificar la versión de Python.
Ahora que ambos han sido confirmados, escriba lo siguiente en el CMD ...

c:\xampp\mysql\bin>pip install pymysql

Después de completar la instalación de pymysql.
cree un nuevo archivo llamado "testconn.py" en su escritorio o en cualquier lugar para un acceso rápido.
Abra este archivo con sublime u otro editor de texto y póngalo en él.
Recuerde cambiar la configuración para reflejar su base de datos.

#!/usr/bin/python
import pymysql
pymysql.install_as_MySQLdb() 

import MySQLdb
db = MySQLdb.connect(user="yourusernamehere",passwd="yourpasswordhere",host="yourhosthere",db="yourdatabasehere")
cursor = db.cursor()
cursor.execute("SELECT * from yourmysqltablehere")
data=cursor.fetchall()
for row in data :
    print (row)
db.close()

Ahora en su CMD - escriba

c:\Desktop>testconn.py

Y eso es todo ... ahora estás completamente conectado desde un script de Python a MySQL ...
Disfruta ...

Kybrd
fuente
0

importar pymysql

conexión de base de datos abierta

db = pymysql.connect ("localhost", "root", "", "ornament")

preparar un objeto cursor usando el método cursor ()

cursor = db.cursor ()

sql = "SELECT * FROM item"

cursor.execute (sql)

Obtener todas las filas en una lista de listas.

results = cursor.fetchall () para la fila en los resultados: item_title = row [1] comment = row [2] print ("El título de los elementos es el siguiente =% s, Los comentarios son los siguientes =% s"% \ (item_title, comentario))

Amjad
fuente