Większość odpowiedzi tutaj koncentruje się na instalacji biblioteki MySQLdb, naprawdę sugerowałbym wybranie MySQL Connector / Python dostarczonych przez MySQL / Oracle, co znacznie upraszcza ten proces: stackoverflow.com/questions/372885/...
Pan Napik
8
Problem z używaniem złącza / języka Python firmy Oracle polega na tym, że zawiera on subtelne błędy i inne problemy z integracją. Jest łatwy w instalacji, ale prawie niemożliwy do uruchomienia we wszystkich rzeczywistych przypadkach użycia, dla których go wypróbowałem. Dlatego zawsze polecam MySQLdb.
Joe C.
7
@ Mr.Napik Używam, pymysqlponieważ według tego porównania jest to czysty darmowy Python .
Cees Timmerman
Odpowiedzi:
1245
Łączenie się z MYSQL z Python 2 w trzech krokach
1 - Ustawienia
Aby cokolwiek zrobić, musisz zainstalować sterownik MySQL. W przeciwieństwie do PHP, tylko sterownik SQLite jest instalowany domyślnie w Pythonie. Najczęściej używanym pakietem do tego jest MySQLdb, ale trudno go zainstalować za pomocą easy_install. Uwaga: MySQLdb obsługuje tylko Python 2.
Dla użytkowników systemu Windows możesz uzyskać plik exe MySQLdb .
W przypadku systemu Linux jest to zwykły pakiet (python-mysqldb). (Możesz użyć sudo apt-get install python-mysqldb(dla dystrybucji opartych na Debianie), yum install MySQL-python(dla wersji opartych na RPM) lub dnf install python-mysql(dla nowoczesnej dystrybucji Fedory) w linii poleceń do pobrania.)
Po instalacji uruchom ponownie. Nie jest to obowiązkowe, ale nie pozwoli mi odpowiedzieć na 3 lub 4 inne pytania w tym poście, jeśli coś pójdzie nie tak. Więc proszę zrestartować komputer.
To jest jak użycie dowolnego innego pakietu:
#!/usr/bin/pythonimportMySQLdb
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 rowsfor row in cur.fetchall():print row[0]
db.close()
Oczywiście istnieje tysiące możliwości i opcji; to bardzo prosty przykład. Będziesz musiał zajrzeć do dokumentacji. Dobry punkt wyjścia .
3 - Bardziej zaawansowane wykorzystanie
Kiedy już wiesz, jak to działa, możesz użyć ORM, aby uniknąć ręcznego pisania SQL i manipulowania tabelami, ponieważ były to obiekty Pythona. Najbardziej znanym ORM w społeczności Python jest SQLAlchemy .
Radzę ci go używać: twoje życie będzie znacznie łatwiejsze.
Niedawno odkryłem inny klejnot w świecie Python: peewee . Jest to bardzo mała ORM, naprawdę łatwa i szybka w konfiguracji, a następnie w użyciu. To sprawia, że mój dzień dla małych projektów lub samodzielnych aplikacji, gdzie używanie dużych narzędzi, takich jak SQLAlchemy lub Django, jest przesadą:
import peeweefrom peewee import*
db =MySQLDatabase('jonhydb', user='john', passwd='megajonhy')classBook(peewee.Model):
author = peewee.CharField()
title = peewee.TextField()classMeta:
database = dbBook.create_table()
book =Book(author="me", title='Peewee is cool')
book.save()for book inBook.filter(author="me"):print book.title
Ten przykład działa od razu po wyjęciu z pudełka. Nie pip install peeweejest wymagane nic oprócz posiadania peewee ( ).
Cieszę się, że lubisz peewee !! Dodałem obsługę MySQL, a także trochę dokumentacji dotyczącej integracji z nim. Miłego hakowania!
coleifer
14
Uwaga: w chwili pisania tego MySQLdb nie obsługuje języka Python 3. Strona sourceforge mówi „Obsługa języka Python 3 już wkrótce”, ale nie została zaktualizowana od 08.10.2012. W przypadku Python 3 jest PyMySQL i oursql .
paul
8
Należy również pamiętać, że wymagane są:pip install MySQL-python
Ben Crowhurst,
5
Ta odpowiedź byłaby bardziej pomocna w przypadku przykładowego połączenia z zewnętrznym serwerem na niestandardowym porcie, aby pokazać, jak to zrobić. Mówienie „localhost” to zwykle nonsens.
Anthony
3
Peewee zmienił domyślne zachowanie i domyślnie nie używa automatycznego zatwierdzania. Nawet sytuacja sterownika DB zmieniła się teraz. Pytanie wymaga aktualizacji, ale ponieważ nadużycie edycji niektórych moich odpowiedzi nie jest już ich edycją.
e-satis
189
Oto jeden ze sposobów, aby to zrobić, używając MySQLdb , który obsługuje tylko Python 2:
#!/usr/bin/pythonimportMySQLdb# 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 timefor x in range(0, numrows):
row = cursor.fetchone()print row[0],"-->", row[1]# Close the connection
db.close()
czy istnieje potrzeba zatwierdzenia w tym przykładzie, ponieważ nie modyfikujesz bazy danych?
sumanth232
3
UWAGA - ten moduł nie obsługuje strefy czasowej połączenia
kommradHomer
To nie działa na moim hostingu współdzielonym. Mówiąc to No module named MySQLdb. Jak korzystać z mysql z pythonem na hostingu współdzielonym. Jakaś alternatywa?
Bhavesh Gangani,
@BhaveshGangani musisz skontaktować się z hostem i zapytać, dlaczego obsługiwane biblioteki Python. Jeśli obsługują one pypi, zawsze można załadować pakiet, gdy nastąpi wdrożenie.
George Stocker,
1
Co ciekawe, chociaż doktorzy twierdzą, że to działa tylko z Pythonem 2, wydaje się, że działa z
Pythonem
122
Oracle (MySQL) obsługuje teraz czysty łącznik Python. Oznacza to, że nie trzeba instalować plików binarnych: to tylko biblioteka Python. Nazywa się to „Connector / Python”.
Tak to jest. Ponadto jest mniej kłopotliwy niż MySQLdb, a interfejs API jest moim zdaniem lepszy. To powinna być odpowiedź.
Anthony
1
Najlepszym sposobem na wygraną jest użycie oficjalnego łącznika mysql w Pythonie
Anas
2
@ J0hnG4lt Możesz po prostu kliknąć „Nie, dziękuję, po prostu zacznij pobieranie” poniżej formularza logowania (który faktycznie wydaje się obowiązkowy, ale nie jest).
ComFreek
6
@ComFreek świetnie. Jak to jest lepsze? Czy możemy przestać stosować „obieg pracy systemu Windows”. Zarządzanie pakietami istnieje.
Jest to jeden pakiet (około 110k), czysty Python, więc jest niezależny od systemu i bardzo prosty w instalacji. Wystarczy pobrać, kliknąć dwukrotnie, potwierdzić umowę licencyjną i przejść. Nie trzeba używać Xcode, MacPorts, kompilacji, ponownego uruchamiania…
Nie tak proste, jak twierdzisz. Kiedy próbowałem zainstalować rpm, otrzymałem kilka problemów z zależnościami (FileDigests i PayloadIsXz) z mojego RPM: rpm -i mysql-connector-python-1.1.5-1.el6.noarch.rpmerror: Failed dependencies:rpmlib(FileDigests) <= 4.6.0-1 is needed by mysql-connector-python-1.1.5-1.el6.noarchrpmlib(PayloadIsXz) <= 5.2-1 is needed by mysql-connector-python-1.1.5-1.el6.noarch
tatlar
2
Wolałem tę bibliotekę, ale nie jest już oficjalnie obsługiwana w PyPi. Od tego czasu przeprowadziłem się do MySQLdb.
Steven Mercatante,
2
@Arms: nie jest już oficjalnie obsługiwany w PyPi? Czy masz na to jakieś źródło?
Messa
7
pip install mysql-connector-pythonbędzie również działać. Nie widzę, gdzie jest napisane, że nie jest już obsługiwane w PyPi? Świetnie, jeśli nie masz dostępu do kompilatorów gcc / C w twoim systemie, a zatem nie możesz zainstalować mysqldb.
dekaltuje
7
od 7 listopada 2016 r. pakiet dla pipa jest tylko łącznikiem mysql, pip search mysql-connectoraby znaleźć nazwę pakietu. odpowiedź stąd: stackoverflow.com/a/22829966/2048266
nommer
117
Przestań używać MySQLDb, jeśli chcesz uniknąć instalowania nagłówków mysql, aby uzyskać dostęp do mysql z python.
Użyj pymysql . Robi wszystko, co MySQLDb, ale zostało zaimplementowane wyłącznie w Pythonie, bez ZEWNĘTRZNYCH Zależności . Dzięki temu proces instalacji we wszystkich systemach operacyjnych jest spójny i łatwy. pymysqlto spadek w zastępstwie MySQLDb i IMHO, nie ma powodu, aby kiedykolwiek używać MySQLDb do czegokolwiek ... KIEDYKOLWIEK! - PTSD from installing MySQLDb on Mac OSX and *Nix systems, ale to tylko ja.
Instalacja
pip install pymysql
To wszystko ... jesteś gotowy do gry.
Przykładowe użycie z repozytorium pithysql Github
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,('[email protected]','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,('[email protected]',))
result = cursor.fetchone()print(result)finally:
connection.close()
TAKŻE - Zamień MySQLdb w istniejącym kodzie szybko i przejrzyście
Jeśli masz istniejący kod, który używa MySQLdb, możesz łatwo zastąpić go pymysql, korzystając z tego prostego procesu:
# import MySQLdb << Remove this line and replace with:import pymysql
pymysql.install_as_MySQLdb()
Wszystkie kolejne odwołania do MySQLdb będą używać przezroczystego pymysql.
„Zawsze” jest trochę mocne ... Co jest nie tak z peewee lub sqlalchemy? Nawet jeśli istnieją jako biblioteki ORM, nadal są tak samo przydatne
OneCricketeer
4
Nie, wcale nie uważam, że jest silny. Biorąc pod uwagę opcję używania MySQLDb lub PyMysql, myślę, że wybór PyMysql nie wymaga myślenia, ponieważ jest to prosta instalacja pip bez żadnych zależności, podczas gdy MySQLDb wymaga zainstalowania plików nagłówkowych programistycznych mysql na platformę systemu operacyjnego, aby działało. Sqlalchemy nie bierze pod uwagę tego, ponieważ wciąż musi owijać moduł, który może komunikować się z mysql, taki jak PyMysql, MySQLDb, CyMySQL itp. Peewee wygląda jednak interesująco, sprawdzę to
OkezieE
2
@ cricket_007 peewee i sqlalchemly nie implementują własnego konektora db, zapewniają warstwę powyżej MySQLdb itp.
rocksportrocker
25
Spróbuj użyć MySQLdb . MySQLdb obsługuje tylko Python 2.
UWAGA - ten moduł nie obsługuje strefy czasowej połączenia
kommradHomer
1
@kommradHomer Czy możesz to wyjaśnić?
Pyderman
1
@kommradHomer - co obsługuje strefa czasowa dla Ciebie (lub innych osób - szczególnie podczas łączenia się localhost)?
warren
1
@warren nie, w moim przypadku nie
łączyłem
1
Jak wykryć, która biblioteka jest zainstalowana do łączenia się z bazą danych?
posfan12
18
Jako sterownik db istnieje również naszsql . Niektóre z powodów wymienionych w tym linku, które mówią, dlaczego naszsql jest lepszy:
oursql ma rzeczywistą parametryzację, wysyłając SQL i dane do MySQL całkowicie osobno.
oursql umożliwia przesyłanie strumieniowe danych tekstowych lub binarnych do bazy danych i strumieniowanie z bazy danych, zamiast wymagać buforowania wszystkiego w kliencie.
oursql może zarówno wstawiać wiersze leniwie, jak i pobierać wiersze leniwie.
oursql ma domyślnie włączoną obsługę Unicode.
oursql obsługuje Python 2.4 do 2.7 bez ostrzeżeń o wycofaniu w wersji 2.6+ (patrz PEP 218) i bez całkowitego niepowodzenia w wersji 2.7 (patrz PEP 328).
oursql działa natywnie na Pythonie 3.x.
Jak połączyć się z mysql za pomocą oursql?
Bardzo podobny do 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]
Nie rozumiem „działa natywnie na Pythonie 3.x”. Właśnie próbowałem go zainstalować, a plik setup.py się bombarduje, ponieważ nie używa nawet wywołań drukowania zgodnych z Python 3. Brzmiało świetnie, dopóki go nie wypróbowałem.
otakucode
15
Uruchom to polecenie w swoim terminalu, aby zainstalować konektor mysql:
pip install mysql-connector-python
I uruchom to w swoim edytorze Python, aby połączyć się z MySQL:
Niektórzy faceci już tam odpowiedzieli na twoje pytanie. Właśnie zapomniałeś uruchomić mydb.commit()po wstawieniu wartości do tabeli
Sherzod
13
SqlAlchemy
SQLAlchemy to zestaw narzędzi Python SQL i Object Relational Mapper, który zapewnia programistom aplikacji pełną moc i elastyczność SQL. SQLAlchemy zapewnia pełny zestaw dobrze znanych wzorców trwałości na poziomie przedsiębiorstwa, zaprojektowanych z myślą o wydajnym i wydajnym dostępie do bazy danych, dostosowanym do prostego języka Python.
Instalacja
pip install sqlalchemy
Zapytanie RAW
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, scoped_session
engine = create_engine("mysql://<user_name>:<password>@<host_name>/<db_name>")
session_obj = sessionmaker(bind=engine)
session = scoped_session(session_obj)# insert into database
session.execute("insert into person values(2, 'random_name')")
session.flush()
session.commit()
Sposób ORM
from sqlalchemy importColumn,Integer,Stringfrom sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, scoped_session
Base= declarative_base()
engine = create_engine("mysql://<user_name>:<password>@<host_name>/<db_name>")
session_obj = sessionmaker(bind=engine)
session = scoped_session(session_obj)# Bind the engine to the metadata of the Base class so that the# declaratives can be accessed through a DBSession instanceBase.metadata.bind = engine
classPerson(Base):
__tablename__ ='person'# Here we define columns for the table person# Notice that each column is also a normal Python instance attribute.
id =Column(Integer, primary_key=True)
name =Column(String(250), nullable=False)# insert into database
person_obj =Person(id=12, name="name")
session.add(person_obj)
session.flush()
session.commit()
Pomimo wszystkich powyższych odpowiedzi, na przykład, jeśli nie chcesz połączyć się z konkretną bazą danych z góry, na przykład jeśli chcesz nadal tworzyć bazę danych (!), Możesz użyć connection.select_db(database), jak pokazano poniżej.
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()
MySQLdb to prosty sposób. Możesz wykonywać zapytania SQL przez połączenie. Kropka.
Mój preferowany sposób, który jest również pythonowy, polega na użyciu potężnego SQLAlchemy . Oto samouczek związany z zapytaniami , a tutaj samouczek na temat możliwości ORM SQLALchemy.
Chociaż niektórzy z was mogą oznaczyć to jako duplikat i denerwować się tym, że kopiuję odpowiedź kogoś innego, NAPRAWDĘ chciałbym podkreślić aspekt odpowiedzi pana Napika. Ponieważ mi tego brakowało, spowodowałem ogólnokrajowy przestój witryny (9 minut). Gdyby tylko ktoś udostępnił te informacje, mógłbym temu zapobiec!
Oto jego kod:
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()
Ważną rzeczą jest tu Spróbuj i wreszcie klauzula. Pozwala to na zamknięcie połączeń ZAWSZE , niezależnie od tego, co dzieje się w części kursora / sqlstatement kodu. Wiele aktywnych połączeń powoduje wzrost wartości DBLoadNoCPU i może spowodować awarię serwera db.
Mam nadzieję, że to ostrzeżenie pomoże uratować serwery i ostatecznie miejsca pracy! :RE
Najlepszym sposobem połączenia się z MySQL z Pythona jest użycie MySQL Connector / Python, ponieważ jest to oficjalny sterownik Oracle dla MySQL do pracy z Pythonem i działa zarówno z Python 3, jak i Python 2.
Użyj connect()metody python konektora mysql, aby połączyć się z MySQL.pass wymaganym argumentem connect()metody. tzn. host, nazwa użytkownika, hasło i nazwa bazy danych.
Utwórz cursorobiekt z obiektu połączenia zwróconego connect()metodą w celu wykonania zapytań SQL.
zamknij połączenie po zakończeniu pracy.
Przykład :
import mysql.connector
from mysql.connector importErrortry:
conn = mysql.connector.connect(host='hostname',
database='db',
user='root',
password='passcode')if conn.is_connected():
cursor = conn.cursor()
cursor.execute("select database();")
record = cursor.fetchall()print("You're connected to - ", record)exceptErroras e :print("Print your error msg", e)finally:#closing database connection.if(conn.is_connected()):
cursor.close()
conn.close()
W przypadku operacji DML - użyj cursor.execute()i, cursor.executemany()aby uruchomić zapytanie. a po tym użyj, connection.commit()aby zachować zmiany w DB
Aby pobrać dane - wykorzystanie cursor.execute()uruchomić kwerendę i cursor.fetchall(), cursor.fetchone(), cursor.fetchmany(SIZE)aby pobrać dane
Zainstalowałem MySQL-python poprzez yum install. Instalacja została zakończona, ale nie mogę zaimportować modułu MySQLdb. Mówi, że nie ma takiego modułu. Wiesz, dlaczego tak jest?
user3527975,
Nie jest jasne, którą odpowiedź masz na myśli, mówiąc „powyżej odpowiedzi”. Proszę uzupełnić swoją odpowiedź. Jeśli chcesz odnieść się do innych odpowiedzi, prosimy o link do konkretnej odpowiedzi.
Flimm,
5
mysqlclient jest najlepszy, ponieważ inni zapewniają wsparcie tylko dla określonych wersji Pythona
pip install mysqlclient
przykładowy kod
import mysql.connector
import _mysql
db=_mysql.connect("127.0.0.1","root","umer","sys")#db=_mysql.connect(host,user,password,db)# Example of how to insert new values:
db.query("""INSERT INTO table1 VALUES ('01', 'myname')""")
db.store_result()
db.query("SELECT * FROM new1.table1 ;")#new1 is scheme table1 is table mysql
res= db.store_result()for i in range(res.num_rows()):print(result.fetch_row())
+1 dla proponując najszybsze rozwiązanie dla Pythona 3. Jednak mysql.connectori _mysqldać zarówno błąd importu (choć druga opcja powinna działać zgodnie z dokumentacją). import MySQLdbdziała, a następnieMySQLdb.connect...
Suzana
3
Zobacz także Storm . Jest to proste narzędzie do mapowania SQL, które pozwala łatwo edytować i tworzyć wpisy SQL bez pisania zapytań.
Oto prosty przykład:
from storm.locals import*# User will be the mapped object; you have to create the table before mapping itclassUser(object):
__storm_table__ ="user"# table name
ID =Int(primary=True)#field ID
name=Unicode()# field name
database = create_database("mysql://root:password@localhost:3306/databaseName")
store =Store(database)
user =User()
user.name = u"Mark"print str(user.ID)# None
store.add(user)
store.flush()# ID is AUTO_INCREMENTprint str(user.ID)# 1 (ID)
store.commit()# commit all changes to the database
Aby znaleźć i użyć obiektu:
michael = store.find(User,User.name == u"Michael").one()print str(user.ID)# 10
#!/usr/bin/pythonimportMySQLdbtry:
db =MySQLdb.connect(host="localhost",# db server, can be a remote one
db="mydb"# database
user="mydb",# username
passwd="mydb123",# password for this username)# Create a Cursor object
cur = db.cursor()# Create a query string. It can contain variables
query_string ="SELECT * FROM MY_TABLE"# Execute the query
cur.execute(query_string)# Get all the rows present the databasefor each_row in cur.fetchall():print each_row
# Close the connection
db.close()exceptException, e:print'Error ', e
Pytanie było trochę zbyt ogólne, ale ta odpowiedź wydaje się nieco zbyt wąska (przynajmniej w tym sensie, że sama instalacja i import modułu nie wystarczy). Wydaje się również, że powłoka i python są zmieszane w jednym bloku kodu bez żadnego wyjaśnienia ani wskazówek co do tego, co idzie gdzie i co robi.
pymysql
ponieważ według tego porównania jest to czysty darmowy Python .Odpowiedzi:
Łączenie się z MYSQL z Python 2 w trzech krokach
1 - Ustawienia
Aby cokolwiek zrobić, musisz zainstalować sterownik MySQL. W przeciwieństwie do PHP, tylko sterownik SQLite jest instalowany domyślnie w Pythonie. Najczęściej używanym pakietem do tego jest MySQLdb, ale trudno go zainstalować za pomocą easy_install. Uwaga: MySQLdb obsługuje tylko Python 2.
Dla użytkowników systemu Windows możesz uzyskać plik exe MySQLdb .
W przypadku systemu Linux jest to zwykły pakiet (python-mysqldb). (Możesz użyć
sudo apt-get install python-mysqldb
(dla dystrybucji opartych na Debianie),yum install MySQL-python
(dla wersji opartych na RPM) lubdnf install python-mysql
(dla nowoczesnej dystrybucji Fedory) w linii poleceń do pobrania.)W przypadku komputerów Mac możesz zainstalować MySQLdb za pomocą Macport .
2 - Wykorzystanie
Po instalacji uruchom ponownie. Nie jest to obowiązkowe, ale nie pozwoli mi odpowiedzieć na 3 lub 4 inne pytania w tym poście, jeśli coś pójdzie nie tak. Więc proszę zrestartować komputer.
To jest jak użycie dowolnego innego pakietu:
Oczywiście istnieje tysiące możliwości i opcji; to bardzo prosty przykład. Będziesz musiał zajrzeć do dokumentacji. Dobry punkt wyjścia .
3 - Bardziej zaawansowane wykorzystanie
Kiedy już wiesz, jak to działa, możesz użyć ORM, aby uniknąć ręcznego pisania SQL i manipulowania tabelami, ponieważ były to obiekty Pythona. Najbardziej znanym ORM w społeczności Python jest SQLAlchemy .
Radzę ci go używać: twoje życie będzie znacznie łatwiejsze.
Niedawno odkryłem inny klejnot w świecie Python: peewee . Jest to bardzo mała ORM, naprawdę łatwa i szybka w konfiguracji, a następnie w użyciu. To sprawia, że mój dzień dla małych projektów lub samodzielnych aplikacji, gdzie używanie dużych narzędzi, takich jak SQLAlchemy lub Django, jest przesadą:
Ten przykład działa od razu po wyjęciu z pudełka. Nie
pip install peewee
jest wymagane nic oprócz posiadania peewee ( ).źródło
pip install MySQL-python
Oto jeden ze sposobów, aby to zrobić, używając MySQLdb , który obsługuje tylko Python 2:
Odnośnik tutaj
źródło
No module named MySQLdb
. Jak korzystać z mysql z pythonem na hostingu współdzielonym. Jakaś alternatywa?Oracle (MySQL) obsługuje teraz czysty łącznik Python. Oznacza to, że nie trzeba instalować plików binarnych: to tylko biblioteka Python. Nazywa się to „Connector / Python”.
http://dev.mysql.com/downloads/connector/python/
źródło
Jeśli nie potrzebujesz MySQLdb, ale akceptujesz dowolną bibliotekę, bardzo, bardzo polecam MySQL Connector / Python z MySQL: http://dev.mysql.com/downloads/connector/python/ .
Jest to jeden pakiet (około 110k), czysty Python, więc jest niezależny od systemu i bardzo prosty w instalacji. Wystarczy pobrać, kliknąć dwukrotnie, potwierdzić umowę licencyjną i przejść. Nie trzeba używać Xcode, MacPorts, kompilacji, ponownego uruchamiania…
Następnie łączysz się jak:
źródło
rpm -i mysql-connector-python-1.1.5-1.el6.noarch.rpm
error: Failed dependencies:
rpmlib(FileDigests) <= 4.6.0-1 is needed by mysql-connector-python-1.1.5-1.el6.noarch
rpmlib(PayloadIsXz) <= 5.2-1 is needed by mysql-connector-python-1.1.5-1.el6.noarch
pip install mysql-connector-python
będzie również działać. Nie widzę, gdzie jest napisane, że nie jest już obsługiwane w PyPi? Świetnie, jeśli nie masz dostępu do kompilatorów gcc / C w twoim systemie, a zatem nie możesz zainstalowaćmysqldb
.pip search mysql-connector
aby znaleźć nazwę pakietu. odpowiedź stąd: stackoverflow.com/a/22829966/2048266Użyj pymysql . Robi wszystko, co MySQLDb, ale zostało zaimplementowane wyłącznie w Pythonie, bez ZEWNĘTRZNYCH Zależności . Dzięki temu proces instalacji we wszystkich systemach operacyjnych jest spójny i łatwy.
pymysql
to spadek w zastępstwie MySQLDb i IMHO, nie ma powodu, aby kiedykolwiek używać MySQLDb do czegokolwiek ... KIEDYKOLWIEK! -PTSD from installing MySQLDb on Mac OSX and *Nix systems
, ale to tylko ja.Instalacja
pip install pymysql
Przykładowe użycie z repozytorium pithysql Github
Jeśli masz istniejący kod, który używa MySQLdb, możesz łatwo zastąpić go pymysql, korzystając z tego prostego procesu:
Wszystkie kolejne odwołania do MySQLdb będą używać przezroczystego pymysql.
źródło
Spróbuj użyć MySQLdb . MySQLdb obsługuje tylko Python 2.
Można tu znaleźć stronę: http://www.kitebird.com/articles/pydbapi.html
Ze strony:
źródło
localhost
)?Jako sterownik db istnieje również naszsql . Niektóre z powodów wymienionych w tym linku, które mówią, dlaczego naszsql jest lepszy:
Jak połączyć się z mysql za pomocą oursql?
Bardzo podobny do mysqldb:
Poradnik w dokumentacji jest całkiem przyzwoity.
I oczywiście dla ORM SQLAlchemy to dobry wybór, jak już wspomniano w innych odpowiedziach.
źródło
Uruchom to polecenie w swoim terminalu, aby zainstalować konektor mysql:
I uruchom to w swoim edytorze Python, aby połączyć się z MySQL:
Próbki do wykonania poleceń MySQL (w edytorze Pythona):
Więcej poleceń: https://www.w3schools.com/python/python_mysql_getstarted.asp
źródło
mysql-connector
tylko z. stackoverflow.com/questions/59405740/…mydb.commit()
po wstawieniu wartości do tabeliSqlAlchemy
Instalacja
Zapytanie RAW
Sposób ORM
źródło
Pomimo wszystkich powyższych odpowiedzi, na przykład, jeśli nie chcesz połączyć się z konkretną bazą danych z góry, na przykład jeśli chcesz nadal tworzyć bazę danych (!), Możesz użyć
connection.select_db(database)
, jak pokazano poniżej.źródło
MySQLdb to prosty sposób. Możesz wykonywać zapytania SQL przez połączenie. Kropka.
Mój preferowany sposób, który jest również pythonowy, polega na użyciu potężnego SQLAlchemy . Oto samouczek związany z zapytaniami , a tutaj samouczek na temat możliwości ORM SQLALchemy.
źródło
dla Python3.6 znalazłem dwa sterowniki: pymysql i mysqlclient. Przetestowałem wydajność między nimi i uzyskałem wynik: mysqlclient jest szybszy.
poniżej znajduje się mój proces testowy (musisz zainstalować haki profilu Pythona w celu analizy upływu czasu :
surowy sql:
select * from FOO;
natychmiast wykonać w terminalu mysql:
46410 rows in set (0.10 sec)
pymysql (2.4s):
oto profil pymysql:
mysqlclient (0.4s)
oto profil mysqlclient:
Wygląda więc na to, że mysqlclient jest znacznie szybszy niż pymysql
źródło
Chociaż niektórzy z was mogą oznaczyć to jako duplikat i denerwować się tym, że kopiuję odpowiedź kogoś innego, NAPRAWDĘ chciałbym podkreślić aspekt odpowiedzi pana Napika. Ponieważ mi tego brakowało, spowodowałem ogólnokrajowy przestój witryny (9 minut). Gdyby tylko ktoś udostępnił te informacje, mógłbym temu zapobiec!
Oto jego kod:
Ważną rzeczą jest tu Spróbuj i wreszcie klauzula. Pozwala to na zamknięcie połączeń ZAWSZE , niezależnie od tego, co dzieje się w części kursora / sqlstatement kodu. Wiele aktywnych połączeń powoduje wzrost wartości DBLoadNoCPU i może spowodować awarię serwera db.
Mam nadzieję, że to ostrzeżenie pomoże uratować serwery i ostatecznie miejsca pracy! :RE
źródło
Najlepszym sposobem połączenia się z MySQL z Pythona jest użycie MySQL Connector / Python, ponieważ jest to oficjalny sterownik Oracle dla MySQL do pracy z Pythonem i działa zarówno z Python 3, jak i Python 2.
wykonaj poniższe czynności, aby połączyć MySQL
zainstaluj złącze za pomocą pip
pip install mysql-connector-python
lub możesz pobrać instalator ze strony https://dev.mysql.com/downloads/connector/python/
Użyj
connect()
metody python konektora mysql, aby połączyć się z MySQL.pass wymaganym argumentemconnect()
metody. tzn. host, nazwa użytkownika, hasło i nazwa bazy danych.Utwórz
cursor
obiekt z obiektu połączenia zwróconegoconnect()
metodą w celu wykonania zapytań SQL.zamknij połączenie po zakończeniu pracy.
Przykład :
Odniesienie - https://pynative.com/python-mysql-database-connection/
Ważne API MySQL Connector Python
W przypadku operacji DML - użyj
cursor.execute()
i,cursor.executemany()
aby uruchomić zapytanie. a po tym użyj,connection.commit()
aby zachować zmiany w DBAby pobrać dane - wykorzystanie
cursor.execute()
uruchomić kwerendę icursor.fetchall()
,cursor.fetchone()
,cursor.fetchmany(SIZE)
aby pobrać daneźródło
Tylko modyfikacja powyższej odpowiedzi. Wystarczy uruchomić to polecenie, aby zainstalować mysql dla Pythona
Zapamiętaj! Rozróżniana jest wielkość liter.
źródło
mysqlclient jest najlepszy, ponieważ inni zapewniają wsparcie tylko dla określonych wersji Pythona
przykładowy kod
patrz https://github.com/PyMySQL/mysqlclient-python
źródło
mysql.connector
i_mysql
dać zarówno błąd importu (choć druga opcja powinna działać zgodnie z dokumentacją).import MySQLdb
działa, a następnieMySQLdb.connect...
Zobacz także Storm . Jest to proste narzędzie do mapowania SQL, które pozwala łatwo edytować i tworzyć wpisy SQL bez pisania zapytań.
Oto prosty przykład:
Aby znaleźć i użyć obiektu:
Znajdź za pomocą klucza podstawowego:
Więcej informacji znajduje się w samouczku .
źródło
To jest połączenie DB MySQL
źródło
najpierw zainstaluj sterownik
Następnie podstawowy kod wygląda następująco:
źródło
w ten sposób możesz połączyć swój kod Pythona z mysql.
źródło
Najpierw zainstaluj sterownik (Ubuntu)
sudo apt-get install python-pip
sudo pip install -U pip
sudo apt-get install python-dev libmysqlclient-dev
sudo apt-get install MySQL-python
Kody połączeń z bazą danych MySQL
źródło
Dla Pythona 3.3
CyMySQL https://github.com/nakagami/CyMySQL
Mam pip zainstalowany na moim systemie Windows 7, wystarczy zainstalować pip cymysql
(nie potrzebujesz cytonu) szybko i bezboleśnie
źródło
Najpierw zainstaluj łącznik python-mysql z https://dev.mysql.com/downloads/connector/python/
w konsoli Python wpisz:
źródło