Jak połączyć się z bazą danych MySQL w Pythonie?

1162

Jak połączyć się z bazą danych MySQL przy użyciu programu python?

George Stocker
źródło
44
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.)

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:

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

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

Ten przykład działa od razu po wyjęciu z pudełka. Nie pip install peeweejest wymagane nic oprócz posiadania peewee ( ).

e-satis
źródło
46
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/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()

Odnośnik tutaj

George Stocker
źródło
4
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”.

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

Ken Brown
źródło
1
czy to jest szybsze niż używanie mysqldb?
alwbtc
8
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.
J0hnG4lt
119

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:

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()
Pan Napik
źródło
2
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.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
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.

OkezieE
źródło
3
„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.

Można tu znaleźć stronę: http://www.kitebird.com/articles/pydbapi.html


Ze strony:

# 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 ()
Hortitude
źródło
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]

Poradnik w dokumentacji jest całkiem przyzwoity.

I oczywiście dla ORM SQLAlchemy to dobry wybór, jak już wspomniano w innych odpowiedziach.

bool.dev
źródło
4
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:

import mysql.connector

mydb = mysql.connector.connect(
      host="localhost",
      user="yusername",
      passwd="password",
      database="database_name"
)

Próbki do wykonania poleceń MySQL (w edytorze Pythona):

mycursor = mydb.cursor()
mycursor.execute("CREATE TABLE customers (name VARCHAR(255), address VARCHAR(255))")    
mycursor.execute("SHOW TABLES")

mycursor.execute("INSERT INTO customers (name, address) VALUES ('John', 'Highway 21')")    
mydb.commit() # Use this command after insert or update

Więcej poleceń: https://www.w3schools.com/python/python_mysql_getstarted.asp

Sherzod
źródło
Czy możesz odpowiedzieć na to pytanie? Jest to związane mysql-connectortylko z. stackoverflow.com/questions/59405740/…
1
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 import Column, Integer, String
from 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 instance
Base.metadata.bind = engine

class Person(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()
anand tripathi
źródło
11

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()
Mahdi
źródło
8

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.

muhuk
źródło
1
Linki są martwe, czy możesz to sprawdzić i zaktualizować o poprawny link?
Naveen Vijay
6

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

from profilehooks import profile
import pymysql.cursors
import pymysql
connection = pymysql.connect(host='localhost', user='root', db='foo')
c = connection.cursor()

@profile(immediate=True)
def read_by_pymysql():
    c.execute("select * from FOO;")
    res = c.fetchall()

read_by_pymysql()

oto profil pymysql: wprowadź opis zdjęcia tutaj


mysqlclient (0.4s)

from profilehooks import profile
import MySQLdb

connection = MySQLdb.connect(host='localhost', user='root', db='foo')
c = connection.cursor()

@profile(immediate=True)
def read_by_mysqlclient():
    c.execute("select * from FOO;")
    res = c.fetchall()

read_by_mysqlclient()

oto profil mysqlclient: wprowadź opis zdjęcia tutaj

Wygląda więc na to, że mysqlclient jest znacznie szybszy niż pymysql

kai
źródło
6

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

Tanner Clark
źródło
6

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

  1. 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/

  1. 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.

  2. Utwórz cursorobiekt z obiektu połączenia zwróconego connect()metodą w celu wykonania zapytań SQL.

  3. zamknij połączenie po zakończeniu pracy.

Przykład :

import mysql.connector
 from mysql.connector import Error
 try:
     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)
 except Error as e :
    print ("Print your error msg", e)
 finally:
    #closing database connection.
    if(conn.is_connected()):
       cursor.close()
       conn.close()

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 DB

  • Aby pobrać dane - wykorzystanie cursor.execute()uruchomić kwerendę i cursor.fetchall(), cursor.fetchone(), cursor.fetchmany(SIZE)aby pobrać dane

Vishal Hule
źródło
Masz * połączenie z ...
John Forbes
5

Tylko modyfikacja powyższej odpowiedzi. Wystarczy uruchomić to polecenie, aby zainstalować mysql dla Pythona

sudo yum install MySQL-python
sudo apt-get install MySQL-python

Zapamiętaj! Rozróżniana jest wielkość liter.

HMS
źródło
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())

patrz https://github.com/PyMySQL/mysqlclient-python

Umer
źródło
+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 it
class User(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_INCREMENT

print 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

Znajdź za pomocą klucza podstawowego:

print store.get(User, 1).name #Mark

Więcej informacji znajduje się w samouczku .

michip96
źródło
2

To jest połączenie DB MySQL

from flask import Flask, render_template, request
from flask_mysqldb import MySQL

app = Flask(__name__)


app.config['MYSQL_HOST'] = 'localhost'
app.config['MYSQL_USER'] = 'root'
app.config['MYSQL_PASSWORD'] = 'root'
app.config['MYSQL_DB'] = 'MyDB'

mysql = MySQL(app)


@app.route('/', methods=['GET', 'POST']) 
def index():
    if request.method == "POST":
        details = request.form
        cur = mysql.connection.cursor()
        cur.execute ("_Your query_")
        mysql.connection.commit()
        cur.close()
        return 'success'
    return render_template('index.html')


if __name__ == '__main__':
    app.run()
Aditya
źródło
1

najpierw zainstaluj sterownik

pip install MySQL-python   

Następnie podstawowy kod wygląda następująco:

#!/usr/bin/python
import MySQLdb

try:
    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 database
    for each_row in cur.fetchall():
        print each_row

    # Close the connection
    db.close()
except Exception, e:
    print 'Error ', e 
Vishvajit Pathak
źródło
1

w ten sposób możesz połączyć swój kod Pythona z mysql.

import MySQLdb
db = MySQLdb.connect(host="localhost",
                 user="appuser",
                 passwd="",
                 db="onco")

cursor = db.cursor()
Haider Ali
źródło
1

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

import MySQLdb
conn = MySQLdb.connect (host = "localhost",user = "root",passwd = "pass",db = "dbname")
cursor = conn.cursor ()
cursor.execute ("SELECT VERSION()")
row = cursor.fetchone ()
print "server version:", row[0]
cursor.close ()
conn.close ()
Hasib Kamal
źródło
0

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

Lazik
źródło
3
Możesz utworzyć nowe pytanie na SO i skomentować z linkiem do niego tutaj.
Lazik
-1

Najpierw zainstaluj łącznik python-mysql z https://dev.mysql.com/downloads/connector/python/

w konsoli Python wpisz:

pip install mysql-connector-python-rf
import mysql.connector
Aditya Agrawal
źródło
1
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.
Ondrej K.