Configurare Django per usare MySQL


171

Voglio allontanarmi un po 'da PHP e imparare Python. Per realizzare lo sviluppo web con Python avrò bisogno di un framework per aiutare con il template e altre cose.

Ho un server non di produzione che uso per testare tutte le cose di sviluppo web. È uno stack LAMP Debian 7.1 che esegue MariaDB invece del comune pacchetto MySQL-server.

Ieri ho installato Django e creato il mio primo progetto chiamato firstweb . Non ho ancora modificato alcuna impostazione.

Ecco il mio primo grande pezzo di confusione. Nel tutorial ho seguito il ragazzo che ha installato Django, ha iniziato il suo primo progetto, riavviato Apache e Django ha lavorato da allora in poi. Andò al suo browser e andò alla pagina predefinita di Django senza problemi.

Io però, devo cd nella mia cartella firstweb ed eseguire

python manage.py runserver myip:port

E funziona Nessun problema. Ma mi chiedo se dovrebbe funzionare in questo modo e se questo causerà problemi lungo la linea?

La mia seconda domanda è che voglio configurarlo in modo che utilizzi il mio database MySQL. Vado nel mio settings.py sotto / firstweb / firstweb e vedo ENGINE e NAME ma non sono sicuro di cosa mettere qui.

E poi nelle aree USER, PASSWORD e HOST è questo il mio database e le sue credenziali? Se sto usando localhost posso semplicemente mettere localhost nell'area HOST?


Nota: dal 01/2016 non esiste un driver MySQL per python 3.5.x. Vedi stackoverflow.com/questions/34456770/… Quindi usa solo fino a Python 3.4. Puoi ancora usare Django 1.9 (ultima versione stabile dal 01/2016).
Tomas Tintera,

Risposte:


316

Il supporto MySQL è semplice da aggiungere. Nel tuo DATABASESdizionario, avrai una voce come questa:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', 
        'NAME': 'DB_NAME',
        'USER': 'DB_USER',
        'PASSWORD': 'DB_PASSWORD',
        'HOST': 'localhost',   # Or an IP Address that your DB is hosted on
        'PORT': '3306',
    }
}

Hai anche la possibilità di utilizzare i file delle opzioni di MySQL , a partire da Django 1.7. Puoi farlo impostando l' DATABASESarray in questo modo:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'OPTIONS': {
            'read_default_file': '/path/to/my.cnf',
        },
    }
}

È inoltre necessario creare il /path/to/my.cnffile con impostazioni simili dall'alto

[client]
database = DB_NAME
host = localhost
user = DB_USER
password = DB_PASSWORD
default-character-set = utf8

Con questo nuovo metodo di connessione in Django 1.7, è importante sapere che sono state stabilite le connessioni dell'ordine:

1. OPTIONS.
2. NAME, USER, PASSWORD, HOST, PORT
3. MySQL option files.

In altre parole, se si imposta il nome del database in OPTIONS, questo avrà la precedenza su NAME, che sovrascriverà qualsiasi cosa in un file di opzioni MySQL.


Se stai solo testando la tua applicazione sul tuo computer locale, puoi usare

python manage.py runserver

L'aggiunta ip:portdell'argomento consente alle macchine diverse dalla propria di accedere all'applicazione di sviluppo. Quando sei pronto per distribuire la tua applicazione, ti consiglio di dare un'occhiata al capitolo sulla distribuzione di Django sul djangobook

Il set di caratteri predefinito di Mysql non è spesso utf-8, quindi assicurati di creare il tuo database usando questo sql:

CREATE DATABASE mydatabase CHARACTER SET utf8 COLLATE utf8_bin

Se stai usando il connettore MySQL di Oracle il tuoENGINE linea dovrebbe apparire così:

'ENGINE': 'mysql.connector.django',

Nota che dovrai prima installare mysql sul tuo sistema operativo.

brew install mysql (MacOS)

Inoltre, il pacchetto client mysql è cambiato per python 3 ( MySQL-Clientfunziona solo per python 2)

pip3 install mysqlclient

26

Per prima cosa esegui i comandi seguenti per installare le dipendenze di Python, altrimenti il ​​comando Python RunServer genererà un errore.

sudo apt-get install libmysqlclient-dev
sudo pip install MySQL-python

Quindi configura il file settings.py come definito da #Andy e all'ultimo esegui:

python manage.py runserver

Divertiti..!!


18

Se stai usando python3.x, esegui il comando seguente

pip install mysqlclient

Quindi modificare setting.py come

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'DB',
     'USER': 'username',
    'PASSWORD': 'passwd',
  }
  }

1
Sto usando virtualenv con Python 3.6. Questo mi salva la vita. Grazie. Inoltre, ricorda di creare prima DB in mysql
Fred,

15

Come detto sopra, puoi facilmente installare xampp prima da https://www.apachefriends.org/download.html Quindi segui le istruzioni come:

  1. Installa ed esegui xampp da http://www.unixmen.com/install-xampp-stack-ubuntu-14-04/ , quindi avvia Apache Web Server e MySQL Database dalla GUI.
  2. È possibile configurare il server Web come desiderato, ma per impostazione predefinita il server Web è in http://localhost:80e database in port 3306e PhpMyadmin inhttp://localhost/phpmyadmin/
  3. Da qui puoi vedere i tuoi database e accedervi usando una GUI molto amichevole.
  4. Crea qualsiasi database che desideri utilizzare nel tuo progetto Django.
  5. Modifica il tuo settings.pyfile come:

    DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'DB_NAME',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'USER': 'root',
        'PASSWORD': '',
    }}
  6. Installa i seguenti pacchetti in virtualenv (se stai usando django su virtualenv, che è più preferito):

    sudo apt-get install libmysqlclient-dev

    pip installa MySQL-python

  7. Questo è tutto!! hai configurato Django con MySQL in un modo molto semplice.

  8. Ora esegui il tuo progetto Django:

    python manage.py migrare

    python manage.py corsa server


7

In realtà, ci sono molti problemi con ambienti diversi, versioni di Python, ecc. Potrebbe anche essere necessario installare i file dev di Python, quindi per "forzare" l'installazione eseguirò tutti questi:

sudo apt-get install python-dev python3-dev
sudo apt-get install libmysqlclient-dev
pip install MySQL-python
pip install pymysql
pip install mysqlclient

Dovresti essere bravo ad andare con la risposta accettata. E può rimuovere i pacchetti non necessari se questo è importante per te.


7

Esegui questi comandi

sudo apt-get install python-dev python3-dev
sudo apt-get install libmysqlclient-dev
pip install MySQL-python 
pip install pymysql
pip install mysqlclient

Quindi configurare settings.py come

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'django_db',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'USER': 'root',
        'PASSWORD': '123456',
    }
}

Goditi la connessione mysql


4

La risposta di Andy aiuta, ma se hai dubbi sull'esposizione della password del database nelle impostazioni di django, ti suggerisco di seguire la configurazione ufficiale di django sulla connessione mysql: https://docs.djangoproject.com/en/1.7/ref/d Database/

Citato qui come:

# settings.py
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'OPTIONS': {
            'read_default_file': '/path/to/my.cnf',
        },
    }
}


# my.cnf
[client]
database = NAME
user = USER
password = PASSWORD
default-character-set = utf8

Per sostituire "HOST": "127.0.0.1" nelle impostazioni, è sufficiente aggiungerlo in my.cnf:

# my.cnf
[client]
database = NAME
host = HOST NAME or IP
user = USER
password = PASSWORD
default-character-set = utf8

Un'altra OPZIONE utile è impostare il tuo motore di archiviazione per django, potresti volerlo nel tuo setting.py:

'OPTIONS': {
   'init_command': 'SET storage_engine=INNODB',
}

4

settings.py

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'django',
    'USER': 'root',
    'PASSWORD': '*****',
    'HOST': '***.***.***.***',
    'PORT': '3306',
    'OPTIONS': {
        'autocommit': True,
    },
}

}

poi:

python manage.py migrate

se il successo genererà queste tabelle di tesi:

auth_group
auth_group_permissions
auth_permission
auth_user
auth_user_groups
auth_user_user_permissions
django_admin_log
django_content_type
django_migrations
django_session

e potrai usare mysql.

questo è un esempio di vetrina, test su Django versione 1.11.5: Django-pool-showcase


3
  1. Installare mysqlclient

sudo pip3 install mysqlclient

se ricevi un errore:

Comando "python setup.py egg_info" non riuscito con codice di errore 1 in / tmp / pip-install-dbljg4tx / mysqlclient /

poi:

 1. sudo apt install libmysqlclient-dev python-mysqldb

 2. sudo pip3 install mysqlclient

  1. Modifica settings.py

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'website',
            'USER': 'root',
            'PASSWORD': '',
            'HOST': '127.0.0.1',
            'PORT': '3306',
            'OPTION': {'init_command':"SET sql_mode='STRICT_TRANS_TABLE',"},
        }
    }

1

Seguire i passaggi indicati per configurarlo per utilizzare il database MySQL:

1) Install MySQL Database Connector :

    sudo apt-get install libmysqlclient-dev

2) Install the mysqlclient library :

    pip install mysqlclient

3) Install MySQL server, with the following command :

    sudo apt-get install mysql-server

4) Create the Database :

    i) Verify that the MySQL service is running:

        systemctl status mysql.service

    ii) Log in with your MySQL credentials using the following command where -u is the flag for declaring your username and -p is the flag that tells MySQL that this user requires a password :  

        mysql -u db_user -p


    iii) CREATE DATABASE db_name;

    iv) Exit MySQL server, press CTRL + D.

5) Add the MySQL Database Connection to your Application:

    i) Navigate to the settings.py file and replace the current DATABASES lines with the following:

        # Database
        # https://docs.djangoproject.com/en/2.0/ref/settings/#databases

        DATABASES = {
            'default': {
                'ENGINE': 'django.db.backends.mysql',
                'OPTIONS': {
                    'read_default_file': '/etc/mysql/my.cnf',
                },
            }
        }
        ...

    ii) Next, lets edit the config file so that it has your MySQL credentials. Use vi as sudo to edit the file and add the following information:

        sudo vi /etc/mysql/my.cnf

        database = db_name
        user = db_user
        password = db_password
        default-character-set = utf8

6) Once the file has been edited, we need to restart MySQL for the changes to take effect :

    systemctl daemon-reload

    systemctl restart mysql

7) Test MySQL Connection to Application:

    python manage.py runserver your-server-ip:8000

0

Devi prima creare un database MySQL. Quindi vai al settings.pyfile e modifica il 'DATABASES'dizionario con le tue credenziali MySQL:

DATABASES = {
 'default': {
 'ENGINE': 'django.db.backends.mysql',
 'NAME': 'YOUR_DATABASE_NAME',
 'USER': 'YOUR_MYSQL_USER',
 'PASSWORD': 'YOUR_MYSQL_PASS',
 'HOST': 'localhost',   # Or an IP that your DB is hosted on
 'PORT': '3306',
 }
}

Ecco una guida completa all'installazione per configurare Django per usare MySQL su virtualenv:

http://codex.themedelta.com/how-to-install-django-with-mysql-in-a-virtualenv-on-linux/

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.