Come posso connettermi a MySQL in Python 3 su Windows?


145

Sto usando ActiveState Python 3 su Windows e volevo collegarmi al mio database MySQL. Ho sentito che mysqldbera il modulo da usare. Non riesco a trovare mysqldbper Python 3.

È disponibile un repository in cui esistono i file binari mysqldb? Come posso connettermi a MySQL in Python 3 su Windows?


Grazie a casevh per il collegamento ai binari non ufficiali, ma ero troppo impaziente e sembra che le masse stiano ancora usando python2 ... quindi ho installato python 2.7 e installato MySQLdb da codegood.com/archives/129
panofish

1
possibile duplicato di MySQL-db lib per Python 3.0?
Il

1
Ogni volta che scrivo pip, il mio stomaco si agita. 7 anni e oltre.
Ska,

Risposte:


274

Al momento ci sono alcune opzioni per usare Python 3 con mysql:

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

  • Supportato ufficialmente da Oracle
  • Pitone puro
  • Un po 'lento
  • Non compatibile con MySQLdb

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

  • Pitone puro
  • Più veloce del connettore mysql
  • Quasi completamente compatibile con MySQLdb, dopo aver chiamatopymysql.install_as_MySQLdb()

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

  • forcella di pymysql con accelerazioni C opzionali

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

  • La biblioteca consigliata da Django.
  • Amichevole fork dell'originale MySQLdb, spera di ricongiungersi un giorno
  • L'implementazione più veloce, poiché è basata su C.
  • Il più compatibile con MySQLdb, in quanto è un fork
  • Debian e Ubuntu lo usano per fornire sia pacchetti python-mysqldbche python3-mysqldbpacchetti.

benchmark qui: https://github.com/methane/mysql-driver-benchmarks


26
pip install mysqlclient ha appena lavorato per me! grazie per l'elenco completo delle opzioni.
ILMostro_7,

4
mysqlclientho appena lavorato per la mia installazione Python3.4 + Django + Passenger + Dreamhost.
Ryandillon,

Ubuntu ha mysqlclient Debian non
ManuelSchneid3r

Sembra che mysqlclient sia in debian testingcome python3-mysqldb, ma non lo è stable. Quindi sarà nella prossima versione.
Collin Anderson,

per installare il connettore mysql su Ubuntu puoi usare un apt similesudo apt-get install python3-mysql.connector
peiman F.

67

Probabilmente dovresti usare invece pymysql - client MySQL Python puro .
Funziona con Python 3.x e non ha dipendenze.

Questo client MySQL Python puro fornisce un'API DB a un database MySQL parlando direttamente con il server tramite il protocollo binario client / server.

Esempio:

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()

14
sfortunatamente è una libreria documentata da ZERO che non funziona
o0 '.

7
@Lohoris: come mai lo sto usando senza problemi?
Oleh Prypin,

Non sono stato in grado di installare questo su Windows 7 con Python 3.x. Qualcuno sa come?
paul

3
Python versione 3.3.1 qui e non si installa. Si lamenta del modulo mancante chiamato constants.
Pijusn,

@Pius Perché stai sbagliando. Ho appena controllato e funziona.
Oleh Prypin

7

Ho anche provato a usare pymysql (sulla mia macchina Win7 x64, Python 3.3), senza troppa fortuna. Ho scaricato il file .tar.gz, estratto, eseguito "setup.py install" e tutto sembrava a posto. Fino a quando ho provato a collegarmi a un database e ho ottenuto "KeyError [56]". Un errore che non sono riuscito a trovare documentato da nessuna parte.

Così ho rinunciato a pymysql e ho optato per il connettore Oracle MySQL .

Viene fornito come pacchetto di installazione e funziona immediatamente. E sembra anche decentemente documentato.


Stavo usando MySQLdb e funziona benissimo, ma chiaramente mi aspetto che questo diventi lo standard defacto nel tempo.
Panofish

6

se vuoi usare MySQLdb prima devi installare pymysql sul tuo PC digitando cmd di windows

    pip install pymysql

quindi nella shell di Python, digitare

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

questo stabilirà la connessione.



5

Sommario

Mysqlclient è la migliore alternativa (IMHO) perché funziona perfettamente con Python 3+ , segue le convenzioni previste (a differenza del connettore mysql), utilizza il nome oggetto mysqldb che consente il comodo porting di software esistente e viene utilizzato da Django per build Python 3

È disponibile un repository in cui esistono i file binari per mysqldb?

Sì. mysqlclient ti permette di usare le funzioni mysqldb. Tuttavia , ricorda che questa non è una porta diretta di mysqldb, ma una build di mysqlclient

Come posso connettermi a MySQL in Python 3 su Windows?

pip installa mysqlclient

Esempio

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

Non riesco a trovare mysqldb per Python 3.

mysqldb non è ancora stato portato




1

Sul mio Mac OS Maverick provo questo:

Successivamente, inserisci l'interprete python3 e digita:

  1. import pymysql . Se non si verificano errori, l'installazione è corretta. Per la verifica scrivere uno script per connettersi a mysql con questo modulo:

  2. # uno script semplice per la connessione MySQL import pymysql db = pymysql.connect (host = "localhost", user = "root", passwd = "* ", db =" biblioteca ") # Sicuro, queste sono informazioni per il mio db # chiudi la connessione db.close () *

Dagli un nome ("con.py" per esempio) e salvalo sul desktop. In Terminale digitare "cd desktop" e quindi $ python con.py Se non si verificano errori, si è connessi al server MySQL. In bocca al lupo!



0

Questo non risponde pienamente alla mia domanda originale, ma penso che sia importante far sapere a tutti cosa ho fatto e perché.

Ho scelto di continuare a utilizzare Python 2.7 invece di Python 3 a causa della prevalenza di 2.7 esempi e moduli sul web in generale.

Ora uso sia mysqldb che mysql.connector per connettermi a MySQL in Python 2.7. Entrambi sono fantastici e funzionano bene. Penso che mysql.connector sia, in definitiva, meglio a lungo termine.


Sono curioso di sapere se stai ancora usando Python 2.7. In generale, penso che sia davvero importante effettuare il passaggio a Python 3, e sono stato sorpreso di vedere così tanti programmatori che optano per Python 2.7 per nuovi progetti. Come sono andate le cose?
vy32,

@ vy32 Penso che potresti essere meno sorpreso dagli sviluppatori che scelgono py27 se consideri che molti SO server non supportano direttamente Python 3. Red Hat Enterprise Linux era ancora in bundle con Python 2.6 fino alla versione più recente, e anche solo quella ha py27.
coredumperror,

Un altro motivo per usare Python 2.7 è perché Maya (che supporta Python) usa 2.7 internamente. A proposito ... se hai anche bisogno di connetterti a MySQL tramite Python in Maya ... usa il connettore mysql Python puro.
Panofish

0

Sto usando cymysql con python3 su un raspberry pi Ho semplicemente installato: sudo pip3 installa cython sudo pip3 installa cymysql dove cython non è necessario ma dovrebbe rendere più veloce cymysql

Finora funziona come un fascino e molto simile a MySQLdb


0

Questo è un breve tutorial su come far funzionare Python 3.7 con Mysql
Grazie a tutti coloro da cui ho ricevuto le risposte alle mie domande
- spero che questo possa aiutare qualcuno un giorno.
-------------------------------------------------- - Il
mio sistema:
versione di Windows: Pro 64-bit

REQUISITI .. prima scarica e installa questi ...
1. Scarica Xampp ..
https://www.apachefriends.org/download.html
2. Scarica Python
https://www.python.org/downloads/windows/

- ------------
// METODO
--------------
Installa xampp prima di aver terminato l'installazione - installa Python 3.7.
Al termine dell'installazione di entrambi, riavviare il sistema Windows.
Ora avvia xampp e dal pannello di controllo - avvia il server mysql.
Confermare le versioni aprendo CMD e nel tipo di terminale

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.

Questo per verificare la versione di 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

Questo è per verificare la versione di Python
Ora che entrambi sono stati confermati digitare quanto segue nel CMD ...

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

Al termine dell'installazione di pymysql.
creare un nuovo file chiamato "testconn.py" sul desktop o ovunque per un accesso rapido.
Apri questo file con sublime o un altro editor di testo e inseriscilo.
Ricorda di modificare le impostazioni per riflettere il tuo database.

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

Ora nella tua CMD - digita

c:\Desktop>testconn.py

E questo è tutto ... ora sei completamente connesso da uno script Python a MySQL ...
Divertiti ...


0

import pymysql

aprire la connessione al database

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

preparare un oggetto cursore usando il metodo cursore ()

cursore = db.cursor ()

sql = "SELECT * FROM item"

cursor.execute (SQL)

Recupera tutte le righe in un elenco di elenchi.

results = cursor.fetchall () per la riga nei risultati: item_title = row [1] comment = row [2] print ("Il titolo degli elementi è il seguente =% s, I commenti sono i seguenti =% s"% \ (item_title, commento))

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.