Configurer Django pour utiliser MySQL

172

Je veux m'éloigner un peu de PHP et apprendre Python. Afin de faire du développement Web avec Python, j'ai besoin d'un cadre pour aider à la création de modèles et à d'autres choses.

J'ai un serveur hors production que j'utilise pour tester tous les éléments de développement Web. C'est une pile Debian 7.1 LAMP qui exécute MariaDB au lieu du paquet MySQL-server commun.

Hier, j'ai installé Django et créé mon premier projet appelé firstweb . Je n'ai encore modifié aucun paramètre.

Voici ma première grande confusion. Dans le tutoriel, j'ai suivi le gars installé Django, commencé son premier projet, redémarré Apache, et Django a juste travaillé à partir de là. Il est allé à son navigateur et est allé à la page par défaut de Django sans problème.

Moi cependant, je dois cd dans mon dossier firstweb et courir

python manage.py runserver myip:port

Et il fonctionne. Aucun problème. Mais je me demande si cela est censé fonctionner comme ça, et si cela posera des problèmes sur toute la ligne?

Ma deuxième question est que je veux le configurer pour qu'il utilise ma base de données MySQL. Je vais dans mon settings.py sous / firstweb / firstweb et je vois MOTEUR et NOM mais je ne sais pas quoi mettre ici.

Et puis dans les zones UTILISATEUR, MOT DE PASSE et HÔTE est-ce ma base de données et ses informations d'identification? Si j'utilise localhost, puis-je simplement placer localhost dans la zone HOST?

Gregor
la source
Remarque: depuis 01/2016, il n'y a pas de pilote MySQL pour python 3.5.x. Voir stackoverflow.com/questions/34456770/ ... Utilisez donc uniquement jusqu'à Python 3.4. Vous pouvez toujours utiliser Django 1.9 (dernière version stable à partir de 01/2016).
Tomas Tintera

Réponses:

317

Le support MySQL est simple à ajouter. Dans votre DATABASESdictionnaire, vous aurez une entrée comme celle-ci:

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',
    }
}

Vous avez également la possibilité d'utiliser les fichiers d'options MySQL , à partir de Django 1.7. Vous pouvez accomplir cela en définissant votre DATABASEStableau comme ceci:

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

Vous devez également créer le /path/to/my.cnffichier avec les paramètres similaires ci-dessus

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

Avec cette nouvelle méthode de connexion dans Django 1.7, il est important de connaître l'ordre des connexions établies:

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

En d'autres termes, si vous définissez le nom de la base de données dans OPTIONS, cela aura la priorité sur NAME, qui remplacerait tout ce qui se trouve dans un fichier d'options MySQL.


Si vous testez simplement votre application sur votre machine locale, vous pouvez utiliser

python manage.py runserver

L'ajout de l' ip:portargument permet à des machines autres que la vôtre d'accéder à votre application de développement. Une fois que vous êtes prêt à déployer votre application, je vous recommande de jeter un œil au chapitre sur le déploiement de Django sur le djangobook

Le jeu de caractères par défaut de Mysql n'est souvent pas utf-8, assurez-vous donc de créer votre base de données en utilisant ce sql:

CREATE DATABASE mydatabase CHARACTER SET utf8 COLLATE utf8_bin

Si vous utilisez le connecteur MySQL d'Oracle, votre ENGINEligne devrait ressembler à ceci:

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

Notez que vous devrez d'abord installer mysql sur votre OS.

brew install mysql (MacOS)

De plus, le package client mysql a changé pour python 3 ( MySQL-Clientfonctionne uniquement pour python 2)

pip3 install mysqlclient
Andy
la source
26

Pour la toute première, exécutez les commandes ci-dessous pour installer les dépendances python, sinon la commande python runserver générera une erreur.

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

Puis configurez le fichier settings.py comme défini par #Andy et à la dernière exécution:

python manage.py runserver

S'amuser..!!

Ritesh
la source
18

Si vous utilisez python3.x, exécutez la commande ci-dessous

pip install mysqlclient

Puis changez setting.py comme

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'DB',
     'USER': 'username',
    'PASSWORD': 'passwd',
  }
  }
Manoj Jadhav
la source
1
J'utilise virtualenv avec python 3.6. Cela me sauve la vie. Je vous remercie. Aussi, n'oubliez pas de créer d'abord DB dans mysql
Fred
15

Comme tout dit ci-dessus, vous pouvez facilement installer xampp d'abord à partir de https://www.apachefriends.org/download.html Ensuite, suivez les instructions comme:

  1. Installez et exécutez xampp à partir de http://www.unixmen.com/install-xampp-stack-ubuntu-14-04/ , puis démarrez le serveur Web Apache et la base de données MySQL à partir de l'interface graphique.
  2. Vous pouvez configurer votre serveur Web comme vous le souhaitez, mais par défaut, le serveur Web est à http://localhost:80et la base de données à port 3306, et PhpMyadmin àhttp://localhost/phpmyadmin/
  3. De là, vous pouvez voir vos bases de données et y accéder en utilisant une interface graphique très conviviale.
  4. Créez n'importe quelle base de données que vous souhaitez utiliser sur votre projet Django.
  5. Modifiez votre settings.pyfichier comme:

    DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'DB_NAME',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'USER': 'root',
        'PASSWORD': '',
    }}
  6. Installez les packages suivants dans virtualenv (si vous utilisez django sur virtualenv, ce qui est plus préféré):

    sudo apt-get install libmysqlclient-dev

    pip installer MySQL-python

  7. C'est tout!! vous avez configuré Django avec MySQL de manière très simple.

  8. Maintenant, lancez votre projet Django:

    python manage.py migrer

    python manage.py runserver

racine
la source
7

En fait, il existe de nombreux problèmes avec différents environnements, versions de python, etc. Vous devrez peut-être également installer des fichiers de développement python, donc pour `` forcer '' l'installation, je lancerais tout cela:

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

Vous devriez être prêt à accepter la réponse acceptée. Et peut supprimer les paquets inutiles si cela est important pour vous.

mimoralea
la source
7

Exécutez ces commandes

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

Ensuite, configurez settings.py comme

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

Profitez de la connexion mysql

Deepak Kumar
la source
4

La réponse d'Andy aide mais si vous avez des inquiétudes quant à l'exposition de votre mot de passe de base de données dans votre paramètre django, je suggère de suivre la configuration officielle de django sur la connexion mysql: https://docs.djangoproject.com/en/1.7/ref/databases/

Cité ici comme:

# 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

Pour remplacer 'HOST': '127.0.0.1' dans le paramètre, ajoutez-le simplement dans my.cnf:

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

Une autre OPTION qui est utile, est de définir votre moteur de stockage pour django, vous pourriez le vouloir dans votre setting.py:

'OPTIONS': {
   'init_command': 'SET storage_engine=INNODB',
}
Jiawei Dai
la source
4

settings.py

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

}

puis:

python manage.py migrate

si le succès générera ces tableaux:

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

et vous pourrez utiliser mysql.

ceci est un exemple de vitrine, test sur Django version 1.11.5: Django-pool-showcase

LuciferJack
la source
3
  1. Installer mysqlclient

sudo pip3 install mysqlclient

si vous obtenez une erreur:

La commande "python setup.py egg_info" a échoué avec le code d'erreur 1 dans / tmp / pip-install-dbljg4tx / mysqlclient /

puis:

 1. sudo apt install libmysqlclient-dev python-mysqldb

 2. sudo pip3 install mysqlclient

  1. Modifier 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',"},
        }
    }
Shubham Harinkhede
la source
1

Suivez les étapes indiquées pour le configurer pour utiliser la base de données 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
Shubham Gupta
la source
0

Vous devez d'abord créer une base de données MySQL. Ensuite, allez dans le settings.pyfichier et modifiez le 'DATABASES'dictionnaire avec vos informations d'identification 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',
 }
}

Voici un guide d'installation complet pour configurer Django pour utiliser MySQL sur un virtualenv:

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

Sibi M
la source