Jak mogę połączyć się z MySQL w Pythonie 3 w systemie Windows?

145

Używam ActiveState Python 3 w systemie Windows i chciałem połączyć się z moją bazą danych MySQL. Słyszałem, że mysqldbto moduł, którego należy użyć. Nie mogę znaleźć mysqldbdla Pythona 3.

Czy jest dostępne repozytorium, w którym istnieją pliki binarne mysqldb? Jak mogę połączyć się z MySQL w Pythonie 3 w systemie Windows?

panofisz
źródło
Dzięki casevh za link do nieoficjalnych plików binarnych, ale byłem zbyt niecierpliwy i wygląda na to, że masy nadal używają pythona2 ... więc zainstalowałem Pythona 2.7 i zainstalowałem MySQLdb z codegood.com/archives/129
panofish
1
możliwy duplikat MySQL-db lib dla Pythona 3.0?
itsadok
1
Za każdym razem, gdy piszę pip, żołądek mi się ściska. 7 lat i wciąż rośnie.
Ska

Odpowiedzi:

274

Obecnie istnieje kilka opcji używania Pythona 3 z mysql:

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

  • Oficjalnie wspierane przez Oracle
  • Czysty Python
  • Trochę wolno
  • Nie jest kompatybilny z MySQLdb

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

  • Czysty Python
  • Szybszy niż mysql-connector
  • Prawie całkowicie kompatybilny z MySQLdb, po wywołaniupymysql.install_as_MySQLdb()

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

  • widelec pymysql z opcjonalnymi przyspieszeniami C.

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

  • Zalecana biblioteka Django.
  • Przyjazny rozwidlenie oryginalnego MySQLdb, ma nadzieję, że pewnego dnia znów się połączy
  • Najszybsza implementacja, ponieważ jest oparta na C.
  • Najbardziej kompatybilny z MySQLdb, ponieważ jest forkiem
  • Debian i Ubuntu używają go do dostarczania zarówno pakietów, jak python-mysqldbi python3-mysqldb.

testy porównawcze tutaj: https://github.com/methane/mysql-driver-benchmarks

Collin Anderson
źródło
26
pip install mysqlclient po prostu pracował dla mnie! dzięki za obszerną listę opcji.
ILMostro_7
4
mysqlclientwłaśnie pracowałem dla mojej instalacji Python3.4 + Django + Passenger + Dreamhost.
ryanjdillon,
Ubuntu ma mysqlclient Debian nie
ManuelSchneid3r
Wygląda na to, że mysqlclient jest w Debianie testingjako python3-mysqldb, ale go nie ma stable. Tak będzie w następnej wersji.
Collin Anderson
do instalacji łącznika mysql na ubuntu możesz użyć apt takiego jaksudo apt-get install python3-mysql.connector
peiman F.
67

Prawdopodobnie powinieneś zamiast tego użyć pymysql - czystego klienta MySQL Python .
Działa z Pythonem 3.xi nie ma żadnych zależności.

Ten klient MySQL w czystym Pythonie zapewnia DB-API do bazy danych MySQL, komunikując się bezpośrednio z serwerem za pośrednictwem binarnego protokołu klient / serwer.

Przykład:

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
źródło
14
niestety jest to biblioteka z dokumentacją ZERO, która tak się
składa,
7
@Lohoris: Dlaczego używam go bez żadnych problemów?
Oleh Prypin
Nie udało mi się zainstalować tego w systemie Windows 7 z Python 3.x. Czy ktoś wie jak?
paul
3
Python w wersji 3.3.1 tutaj i nie można go zainstalować. Skarży się na brak modułu o nazwie constants.
Pijusn
@Pius Ponieważ robisz to źle. Właśnie sprawdzone i działa.
Oleh Prypin
7

Próbowałem również użyć pymysql (na moim komputerze z Win7 x64, Python 3.3), bez zbytniego szczęścia. Ściągnąłem plik .tar.gz, wypakowałem, uruchomiłem „setup.py install” i wszystko wydawało się w porządku. Dopóki nie spróbowałem połączyć się z bazą danych i otrzymałem "KeyError [56]". Błąd, którego nie udało mi się nigdzie znaleźć, udokumentowany.

Zrezygnowałem więc z pymysql i zdecydowałem się na łącznik Oracle MySQL .

Jest dostarczany jako pakiet instalacyjny i działa po wyjęciu z pudełka. Wydaje się też przyzwoicie udokumentowane.

Bogd
źródło
Używałem MySQLdb i to działa świetnie, ale najwyraźniej spodziewałbym się, że z czasem stanie się to standardem defacto.
panofish
6

jeśli chcesz używać MySQLdb najpierw musisz zainstalować pymysql na swoim komputerze wpisując cmd of windows

    pip install pymysql

następnie w powłoce Pythona wpisz

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

to ustanowi połączenie.

Dołek na policzku
źródło
5

Podsumowanie

Mysqlclient jest najlepszą alternatywą (IMHO), ponieważ działa bezbłędnie z Pythonem 3+ , przestrzega oczekiwanych konwencji (w przeciwieństwie do łącznika mysql), używa nazwy obiektu mysqldb, która umożliwia wygodne przenoszenie istniejącego oprogramowania i jest używana przez Django do kompilacji Pythona 3

Czy jest dostępne repozytorium, w którym istnieją pliki binarne dla mysqldb?

Tak. mysqlclient umożliwia korzystanie z funkcji mysqldb. Pamiętaj jednak, że nie jest to bezpośredni port stworzony przez mysqldb, ale kompilacja stworzona przez mysqlclient

Jak mogę połączyć się z MySQL w Pythonie 3 w systemie Windows?

pip zainstaluj mysqlclient

Przykład

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

Nie mogę znaleźć mysqldb dla Pythona 3.

mysqldb nie został jeszcze przeniesiony

Rahul
źródło
4

PyMySQL zapewnia również interfejs podobny do MySQLDb. Możesz spróbować swojej inicjalizacji:

import pymysql
pymysql.install_as_MySQLdb()

Istnieje również port mysql-python na github dla python3.

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

sagarchalise
źródło
1

Na moim Mac OS Maverick próbuję tego:

Następnie wprowadź interpreter python3 i wpisz:

  1. import pymysql . Jeśli nie ma błędu, instalacja jest prawidłowa. W celu weryfikacji napisz skrypt łączący się z mysql za pomocą tego formularza:

  2. # prosty skrypt do importu połączenia MySQL pymysql db = pymysql.connect (host = "localhost", user = "root", passwd = "* ", db =" biblioteca ") # Jasne, to jest informacja dla mojej bazy # zamknij połączenie db.close () *

Nadaj mu nazwę (na przykład „con.py”) i zapisz na pulpicie. W Terminalu wpisz "cd desktop", a następnie $ python con.py Jeśli nie ma błędu, jesteś połączony z serwerem MySQL. Powodzenia!

duke2909
źródło
0

CyMySQL https://github.com/nakagami/CyMySQL

Zainstalowałem pip na moim Windows 7, z pythonem 3.3 po prostu pip install cymysql

(nie potrzebujesz cythonu) szybko i bezboleśnie

Lazik
źródło
0

To nie w pełni odpowiada na moje pierwotne pytanie, ale myślę, że ważne jest, aby wszyscy wiedzieli, co zrobiłem i dlaczego.

Zdecydowałem się nadal używać Pythona 2.7 zamiast Pythona 3 ze względu na rozpowszechnienie przykładów 2.7 i modułów w sieci w ogóle.

Teraz używam zarówno mysqldb, jak i mysql.connector do łączenia się z MySQL w Pythonie 2.7. Obie są świetne i działają dobrze. Myślę, że mysql.connector jest jednak ostatecznie lepszy na dłuższą metę.

panofisz
źródło
Jestem ciekawy, czy nadal używasz Pythona 2.7. Ogólnie uważam, że przejście na Python 3 jest naprawdę ważne i byłem zaskoczony, widząc tak wielu programistów, którzy decydują się na Python 2.7 w nowych projektach. Jak się wszystko ułożyło?
vy32
@ vy32 Myślę, że możesz być mniej zaskoczony wyborem przez deweloperów py27, jeśli weźmiesz pod uwagę, że wiele systemów operacyjnych serwera nie obsługuje bezpośrednio Pythona 3. Red Hat Enterprise Linux był nadal dołączany do Pythona 2.6 aż do najnowszej wersji, a nawet tej tylko ma py27.
coredumperror
Innym powodem używania Pythona 2.7 jest to, że Maya (która obsługuje Pythona) używa wewnętrznie wersji 2.7. BTW ... jeśli potrzebujesz również połączyć się z MySQL przez Pythona w Maya ... użyj czystego łącznika Python mysql.
panofish
0

Używam cymysql z python3 na raspberry pi Po prostu zainstalowałem przez: sudo pip3 zainstaluj cython sudo pip3 zainstaluj cymysql, gdzie cython nie jest konieczny, ale powinien przyspieszyć cymysql

Jak dotąd działa jak urok i jest bardzo podobny do MySQLdb

Jaco
źródło
0

To jest krótki poradnik jak uruchomić Python 3.7 pracując z MySQL.
Dziękuję wszystkim, od których otrzymałem odpowiedzi na moje pytania
- mam nadzieję, że to komuś kiedyś pomoże.
-------------------------------------------------- -
Mój system:
wersja Windows: Pro 64-bit

WYMAGANIA .. najpierw pobierz i zainstaluj ...
1. Pobierz Xampp ..
https://www.apachefriends.org/download.html
2. Pobierz Python
https://www.python.org/downloads/windows/

- ------------
// METODA
--------------
Najpierw zainstaluj xampp po zakończeniu instalacji - zainstaluj Python 3.7.
Po zakończeniu instalacji obu - uruchom ponownie system Windows.
Teraz uruchom Xampp iz panelu sterowania - uruchom serwer mysql.
Potwierdź wersje, otwierając CMD i typ terminala

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.

Ma to na celu sprawdzenie wersji 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

Ma to na celu sprawdzenie wersji Pythona
Teraz, gdy oba zostały potwierdzone, wpisz następujące polecenie do CMD ...

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

Po zakończeniu instalacji pymysql.
utwórz nowy plik o nazwie „testconn.py” na pulpicie lub gdziekolwiek, aby mieć do niego szybki dostęp.
Otwórz ten plik za pomocą sublime lub innego edytora tekstu i umieść go w nim.
Pamiętaj, aby zmienić ustawienia, aby odzwierciedlały Twoją bazę danych.

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

Teraz w swoim CMD - wpisz

c:\Desktop>testconn.py

I to wszystko ... jesteś teraz w pełni połączony ze skryptu Pythona do mysql ...
Ciesz się ...

Kybrd
źródło
0

import pymysql

otwarte połączenie z bazą danych

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

przygotuj obiekt kursora za pomocą metody cursor ()

kursor = db.cursor ()

sql = "SELECT * FROM item"

kursor.execute (sql)

Pobierz wszystkie wiersze z listy list.

wyniki = kursor.fetchall () dla wiersza w wynikach: item_title = row [1] comment = row [2] print ("Tytuły pozycji są następujące =% s, komentarze są następujące =% s"% \ (item_title, komentarz))

Amjad
źródło