Come mi collego a un database MySQL in Python?


1163

Come mi collego a un database MySQL usando un programma Python?


44
La maggior parte delle risposte qui si concentrano su come installare biblioteca MySQLdb, vorrei davvero suggerire la scelta di MySQL Connector / Python fornito da MySQL / Oracle, che rende il processo molto più semplice: stackoverflow.com/questions/372885/...
Mr. Napik

8
Il problema con l'utilizzo di Oracle Connector / Python è che presenta bug sottili e altri problemi di integrazione. È facile da installare, ma quasi impossibile mettersi al lavoro per tutti i casi d'uso reali in cui l'ho provato. Ecco perché consiglio sempre MySQLdb.
Joe C.

7
@ Mr.Napik lo sto usando pymysqlperché è puro Python gratuito secondo questo confronto .
Cees Timmerman,

Risposte:


1246

Connessione a MYSQL con Python 2 in tre passaggi

1 - Impostazione

È necessario installare un driver MySQL prima di fare qualsiasi cosa. A differenza di PHP, solo il driver SQLite è installato di default con Python. Il pacchetto più usato per farlo è MySQLdb ma è difficile installarlo usando easy_install. Nota: MySQLdb supporta solo Python 2.

Per gli utenti Windows, puoi ottenere un exe di MySQLdb .

Per Linux, questo è un pacchetto casuale (python-mysqldb). (È possibile utilizzare sudo apt-get install python-mysqldb(per distribuzioni basate su debian), yum install MySQL-python(per basato su rpm) o dnf install python-mysql(per la distribuzione fedora moderna) nella riga di comando per scaricare.)

Per Mac, puoi installare MySQLdb usando Macport .

2 - Utilizzo

Dopo l'installazione, riavviare. Questo non è obbligatorio, ma mi impedirà di rispondere a 3 o 4 altre domande in questo post se qualcosa va storto. Quindi per favore riavvia.

Quindi è come usare qualsiasi altro pacchetto:

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

Certo, ci sono migliaia di possibilità e opzioni; questo è un esempio molto semplice. Dovrai consultare la documentazione. Un buon punto di partenza .

3 - Utilizzo più avanzato

Una volta che sai come funziona, potresti voler usare un ORM per evitare di scrivere manualmente SQL e manipolare le tue tabelle come fossero oggetti Python. L'ORM più famoso nella comunità Python è SQLAlchemy .

Ti consiglio vivamente di usarlo: la tua vita sarà molto più semplice.

Di recente ho scoperto un altro gioiello nel mondo Python: peewee . È un ORM molto leggero, davvero facile e veloce da configurare e utilizzare. È la mia giornata per piccoli progetti o app stand alone, dove l'utilizzo di grandi strumenti come SQLAlchemy o Django è eccessivo:

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

Questo esempio funziona immediatamente. Nient'altro che avere peewee ( pip install peewee) è richiesto.


46
Sono contento che ti piaccia peewee !! Ho aggiunto il supporto per MySQL e alcuni documenti sull'integrazione con esso. Happy hacking!
Coleifer,

14
Nota, al momento della stesura di questo documento, MySQLdb non supporta Python 3. La pagina sourceforge dice "Supporto Python 3 in arrivo" ma non è stato aggiornato dal 08/10/2012. Per Python 3 c'è PyMySQL e la nostraql .
paul

8
Si noti inoltre quanto segue:pip install MySQL-python
Ben Crowhurst,

5
Questa risposta sarebbe più utile con una connessione di esempio a un server esterno su una porta non standard per mostrare come farlo. Dire localhost è il solito modo di farlo è una sciocchezza.
Anthony,

3
Peewee ha modificato il comportamento predefinito e non utilizza più autocommit per impostazione predefinita. Anche la situazione del driver DB è cambiata ora. La domanda deve essere aggiornata, ma poiché l'abuso delle modifiche su alcune delle mie risposte, non le modifico più.
e-satis,

189

Ecco un modo per farlo, usando MySQLdb , che supporta solo 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()

Riferimento qui


4
è necessario impegnarsi in questo esempio poiché non si modifica il database?
sumanth232,

3
ATTENZIONE: questo modulo non ha il supporto del fuso orario per la connessione
kommradHomer,

Non funziona sul mio hosting condiviso. Detto questo No module named MySQLdb. Come posso usare mysql con Python su hosting condiviso. Qualche alternativa?
Bhavesh Gangani,

@BhaveshGangani dovrai contattare il tuo host e chiederti perché supportano le librerie Python. Se supportano pypi, è possibile caricare sempre il pacchetto quando si verifica la distribuzione.
George Stocker,

1
È interessante notare che anche se i documenti dicono che funziona solo con Python 2, sembra funzionare con Python 3 per me
lucidbrot,

122

Oracle (MySQL) ora supporta un connettore Python puro. Ciò significa che nessun binario da installare: è solo una libreria Python. Si chiama "Connettore / Python".

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


1
è più veloce dell'uso di mysqldb?
alwbtc,

8
Sì. Inoltre, è meno seccante di MySQLdb e l'API è migliore secondo me. Questa dovrebbe essere la risposta.
Anthony,

1
usare il connettore mysql ufficiale di Python è il modo migliore per guadagnare tempo
Anas,

2
@ J0hnG4lt Puoi semplicemente fare clic su "No grazie, avvia il mio download" sotto il modulo di accesso (che in realtà sembra obbligatorio, ma non lo è).
ComFreek,

6
@ComFreek fantastico. Come va meglio? Possiamo smettere di applicare il "flusso di lavoro di Windows". La gestione dei pacchetti esiste.
J0hnG4lt

120

Se non hai bisogno di MySQLdb, ma accetti qualsiasi libreria, ti consiglio caldamente MySQL Connector / Python di MySQL: http://dev.mysql.com/downloads/connector/python/ .

È un pacchetto (circa 110k), Python puro, quindi è indipendente dal sistema e semplicissimo da installare. Basta scaricare, fare doppio clic, confermare il contratto di licenza e andare. Non è necessario Xcode, MacPorts, compilare, riavviare ...

Quindi ti connetti come:

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

2
Non abbastanza semplice come affermi. Quando ho provato a installare l'rpm ho avuto un paio di problemi di dipendenza (FileDigests e PayloadIsXz) dal mio 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
Preferivo questa libreria, ma non è più ufficialmente supportata su PyPi. Da allora mi sono trasferito su MySQLdb.
Steven Mercatante,

2
@Arms: non è più ufficialmente supportato su PyPi? Hai qualche fonte per questo?
Messa

7
pip install mysql-connector-pythonfunzionerà anche. Non vedo dove dice che non è più supportato su PyPi? Ottimo se non hai accesso ai compilatori gcc / C sul tuo sistema e quindi non puoi installarlo mysqldb.
decrementa il

7
a partire dal 7 novembre 2016, il pacchetto per pip è solo mysql-connettore, pip search mysql-connectorper trovare il nome del pacchetto. risposta da qui: stackoverflow.com/a/22829966/2048266
nommer

117

Smetti di usare MySQLDb se vuoi evitare di installare le intestazioni mysql solo per accedere a mysql da python.

Usa pymysql . Fa tutto ciò che fa MySQLDb, ma è stato implementato esclusivamente in Python senza dipendenze esterne . Ciò rende il processo di installazione su tutti i sistemi operativi coerente e semplice. pymysqlè un calo in sostituzione di MySQLDb e IMHO non c'è motivo di usare MySQLDb per nulla ... MAI! - PTSD from installing MySQLDb on Mac OSX and *Nix systems, ma sono solo io.

Installazione

pip install pymysql

Ecco fatto ... sei pronto per giocare.

Esempio di utilizzo dal repository Github di pymysql

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, ('webmaster@python.org', '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, ('webmaster@python.org',))
        result = cursor.fetchone()
        print(result)
finally:
    connection.close()

ANCHE - Sostituisci MySQLdb nel codice esistente in modo rapido e trasparente

Se hai un codice esistente che utilizza MySQLdb, puoi facilmente sostituirlo con pymysql usando questo semplice processo:

# import MySQLdb << Remove this line and replace with:
import pymysql
pymysql.install_as_MySQLdb()

Tutti i riferimenti successivi a MySQLdb useranno pymysql in modo trasparente.


3
"Sempre" è un po 'forte ... Cosa c'è di sbagliato in pipì o sqlalchemy? Anche se esistono come librerie ORM, sono comunque altrettanto utili
OneCricketeer,

4
No, non credo sia affatto forte. Data la possibilità di utilizzare MySQLDb o PyMysql, penso che scegliere PyMysql sia un gioco da ragazzi perché è una semplice installazione pip senza dipendenze, mentre MySQLDb richiede l'installazione di file di intestazione di sviluppo mysql per la piattaforma del sistema operativo affinché funzioni. Sqlalchemy non tiene conto di questo perché deve ancora avvolgere un modulo che può parlare a mysql come PyMysql, MySQLDb, CyMySQL ecc. Peewee sembra interessante, lo controllerò
OkezieE

2
@ cricket_007 peewee e sqlalchemly non implementano il proprio connettore db, forniscono uno strato sopra MySQLdb ecc.
rocksportrocker

25

Prova a usare MySQLdb . MySQLdb supporta solo Python 2.

C'è un modo per pagina qui: http://www.kitebird.com/articles/pydbapi.html


Dalla pagina:

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

2
ATTENZIONE: questo modulo non ha il supporto del fuso orario per la connessione
kommradHomer,

1
@kommradHomer Puoi approfondire per favore?
Pyderman,

1
@kommradHomer: che importanza ha il supporto del fuso orario per te (o per altri, specialmente quando ti colleghi localhost)?
Warren,

1
@warren no, non stavo collegando localhost nel mio caso
kommradHomer il

1
Come posso rilevare quale libreria è installata per la connessione a un database?
posfan12

18

Come driver db, c'è anche il nostro qq . Alcuni dei motivi elencati su quel link, che dicono perché il nostroqq è migliore:

  • oursql ha una vera parametrizzazione, inviando SQL e dati a MySQL completamente separatamente.
  • oursql consente lo streaming di dati di testo o binari nel database e lo streaming fuori dal database, invece di richiedere che tutto sia bufferizzato nel client.
  • oursql può sia inserire le righe pigramente sia recuperare le file pigramente.
  • oursql ha il supporto Unicode attivo per impostazione predefinita.
  • oursql supporta python da 2.4 a 2.7 senza alcun avviso di deprecazione su 2.6+ (vedi PEP 218) e senza fallire completamente su 2.7 (vedi PEP 328).
  • oursql funziona nativamente su Python 3.x.

Quindi, come connettersi a mysql con Ourql?

Molto simile a 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]

Il tutorial nella documentazione è abbastanza decente.

E ovviamente per ORM SQLAlchemy è una buona scelta, come già menzionato nelle altre risposte.


4
Non capisco il "funziona nativamente su Python 3.x". Ho appena provato a installarlo e setup.py bombarda perché non usa nemmeno le chiamate di stampa compatibili con Python 3. Suonava benissimo fino a quando non l'ho provato.
otakucode,

15

Esegui questo comando nel tuo terminale per installare il connettore mysql:

pip install mysql-connector-python

Ed eseguilo nel tuo editor Python per connetterti a MySQL:

import mysql.connector

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

Esempi per eseguire i comandi MySQL (nel tuo python edior):

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

Per ulteriori comandi: https://www.w3schools.com/python/python_mysql_getstarted.asp


Puoi rispondere per favore ?? È legato mysql-connectorsolo a. stackoverflow.com/questions/59405740/...

1
Alcuni ragazzi hanno già risposto alla tua domanda lì. Hai appena dimenticato di eseguire mydb.commit()dopo aver inserito i valori nella tabella
Sherzod

13

SQLAlchemy


SQLAlchemy è il toolkit SQL Python e Object Relational Mapper che offre agli sviluppatori di applicazioni tutta la potenza e la flessibilità di SQL. SQLAlchemy offre una suite completa di ben noti modelli di persistenza a livello aziendale, progettati per un accesso al database efficiente e ad alte prestazioni, adattati in un linguaggio di dominio semplice e Pythonic.

Installazione

pip install sqlalchemy

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

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

11

Nonostante tutte le risposte di cui sopra, nel caso in cui non si desideri connettersi a un database specifico in anticipo, ad esempio, se si desidera creare ancora il database (!), È possibile utilizzare connection.select_db(database), come dimostrato di seguito.

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

8

MySQLdb è il modo più semplice. È possibile eseguire query SQL su una connessione. Periodo.

Il mio modo preferito, che è anche pitonico, è usare invece il potente SQLAlchemy . Ecco un tutorial relativo alle query ed ecco un tutorial sulle funzionalità ORM di SQLALchemy.


1
I collegamenti sono morti, puoi esaminarli e aggiornarli con il collegamento corretto?
Naveen Vijay,

6

per Python3.6 ho trovato due driver: pymysql e mysqlclient. Ho testato le prestazioni tra loro e ho ottenuto il risultato: il mysqlclient è più veloce.

di seguito è riportato il mio processo di test (è necessario installare i profili di python lib per analizzare il tempo trascorso time

sql grezzo: select * from FOO;

eseguire immediatamente nel terminale 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()

ecco il profilo pymysql: inserisci qui la descrizione dell'immagine


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

ecco il profilo mysqlclient: inserisci qui la descrizione dell'immagine

Quindi, sembra che mysqlclient sia molto più veloce di pymysql


6

Anche se alcuni di voi potrebbero contrassegnarlo come un duplicato e arrabbiarsi del fatto che sto copiando la risposta di qualcun altro, Vorrei VERAMENTE mettere in evidenza un aspetto della risposta del signor Napik. Perché ho perso questo, ho causato tempi di inattività del sito Web a livello nazionale (9 minuti). Se solo qualcuno avesse condiviso queste informazioni, avrei potuto impedirle!

Ecco il suo codice:

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

La cosa importante qui è la clausola Try and Infine . Ciò consente di chiudere SEMPRE le connessioni , indipendentemente da ciò che accade nella parte cursore / sqlstatement del codice. Molte connessioni attive causano il picco di DBLoadNoCPU e potrebbero causare l'arresto anomalo di un server db.

Spero che questo avviso aiuti a salvare i server e alla fine i lavori! : D


6

Il modo migliore per connettersi a MySQL da Python è utilizzare MySQL Connector / Python perché è un driver Oracle ufficiale per MySQL per lavorare con Python e funziona sia con Python 3 che con Python 2.

seguire i passaggi indicati di seguito per connettere MySQL

  1. installare il connettore usando pip

    pip install mysql-connector-python

oppure puoi scaricare il programma di installazione da https://dev.mysql.com/downloads/connector/python/

  1. Utilizzare il connect()metodo python del connettore mysql per connettersi a MySQL. Passare l'argomento richiesto al connect()metodo. cioè host, nome utente, password e nome del database.

  2. Crea cursoroggetto dall'oggetto connessione restituito dal connect()metodo per eseguire query SQL.

  3. chiudere la connessione al termine del lavoro.

Esempio :

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

Riferimento - https://pynative.com/python-mysql-database-connection/

API importante di MySQL Connector Python

  • Per operazioni DML: utilizzare cursor.execute()e cursor.executemany()per eseguire la query. e dopo questo uso connection.commit()per mantenere le modifiche al DB

  • Per recuperare i dati - Utilizzare cursor.execute()per eseguire query e cursor.fetchall(), cursor.fetchone(), cursor.fetchmany(SIZE)per recuperare i dati


Sei * connesso a ...
John Forbes il

5

Solo una modifica nella risposta sopra. Basta eseguire questo comando per installare mysql per Python

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

ricorda! Fa distinzione tra maiuscole e minuscole.


Ho installato MySQL-python tramite yum install. L'installazione è stata completata ma non riesco a importare il modulo MySQLdb. Non dice tale modulo. Qualche idea sul perché sia ​​così?
user3527975

Non è chiaro quale risposta intendi quando dici "sopra la risposta". Si prega di rendere la risposta completa in sé. Se si desidera fare riferimento ad altre risposte, si prega di collegarsi alla risposta specifica.
Flimm,

5

mysqlclient è il migliore in quanto altri forniscono supporto solo a versioni specifiche di Python

 pip install mysqlclient

codice di esempio

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

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


+1 per proporre la soluzione più veloce per python 3. Tuttavia, mysql.connectore _mysqldare a entrambi un errore di importazione (sebbene la seconda opzione dovrebbe funzionare secondo la documentazione). import MySQLdbfunziona, quindiMySQLdb.connect...
Suzana,

3

Dai anche un'occhiata a Storm . È un semplice strumento di mappatura SQL che consente di modificare e creare facilmente voci SQL senza scrivere le query.

Qui c'è un semplice esempio:

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

Per trovare e usare l'oggetto:

michael = store.find(User, User.name == u"Michael").one()
print str(user.ID) # 10

Trova con chiave primaria:

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

Per ulteriori informazioni consultare il tutorial .


2

Questa è la connessione Mysql DB

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

1

installare prima il driver

pip install MySQL-python   

Quindi un codice di base è il seguente:

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

1

puoi connettere il tuo codice Python a mysql in questo modo.

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

cursor = db.cursor()

1

Prima installa il driver (Ubuntu)

  • sudo apt-get install python-pip

  • sudo pip install -U pip

  • sudo apt-get install python-dev libmysqlclient-dev

  • sudo apt-get installa MySQL-python

Codici di connessione al database 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 ()


-1

Innanzitutto, installa il connettore python-mysql da https://dev.mysql.com/downloads/connector/python/

sulla console Python inserire:

pip install mysql-connector-python-rf
import mysql.connector

1
La domanda era un po 'troppo ampia, ma questa risposta sembra essere un po' troppo ristretta (almeno nel senso che l'installazione e l'importazione di un modulo da solo non lo farà). Sembra inoltre che shell e python si mescolino in un unico blocco di codice senza alcuna spiegazione o suggerimento su cosa vada dove e cosa.
Ondrej K.
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.