web-dev-qa-db-fra.com

Configuration de Django pour utiliser MySQL

Je veux m'éloigner un peu de PHP et apprendre Python. Afin de faire du développement Web avec Python, il me faut un cadre pour aider à la modélisation et à d'autres choses.

J'ai un serveur non productif 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 à la place du paquet MySQL-server commun.

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

Voici mon premier gros morceau de confusion. Dans le tutoriel, j'ai suivi le gars qui avait installé Django, lancé son premier projet, redémarré Apache et Django fonctionnait désormais à partir de maintenant. Il est allé sur son navigateur et est allé à la page par défaut Django sans aucun problème.

Cependant, je dois aller dans mon dossier firstweb et lancer

python manage.py runserver myip:port

Et il fonctionne. Aucun problème. Mais je me demande si cela est supposé fonctionner de la sorte, et si cela va causer des problèmes à terme.

Ma deuxième question est que je veux le configurer afin qu'il utilise ma base de données MySQL. Je vais dans le fichier settings.py sous/firstweb/firstweb et je vois ENGINE et NAME mais je ne suis pas sûr de ce qu'il faut mettre ici.

Et puis, dans les zones USER, PASSWORD et Host, s'agit-il de ma base de données et de ses informations d'identification? Si j'utilise localhost , puis-je simplement mettre localhost dans la zone de l'hôte ?

158
gregor

support de MySQL est simple à ajouter. Dans votre dictionnaire DATABASES, 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 MySQL fichiers d’option , à partir de Django 1.7. Vous pouvez y parvenir en définissant votre tableau DATABASES comme suit:

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

Vous devez également créer le fichier /path/to/my.cnf avec les mêmes paramètres que 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 savoir que l'ordre des connexions est établi:

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, ce qui remplacerait tout ce qui se trouve dans un fichier d'options MySQL.


Si vous testez simplement votre application sur votre ordinateur local, vous pouvez utiliser

python manage.py runserver

L'ajout de l'argument ip:port permet à d'autres machines 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 coup d'oeil au chapitre sur Déployer 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 connecteur MySQL d’Oracle votre ligne ENGINE devrait ressembler à ceci:

'ENGINE': 'mysql.connector.Django',

Notez que vous devrez d’abord installer mysql sur votre système d’exploitation.

brew install mysql (MacOS)

De plus, le paquet du client mysql a changé pour python 3 (MySQL-Client ne fonctionne que pour python 2)

pip3 install mysqlclient
278
Andy

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

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

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

python manage.py runserver

S'amuser..!!

25
Ritesh

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',
  }
  }
14
Manoj Jadhav

Comme tout ce qui a été dit ci-dessus, vous pouvez facilement installer xampp en premier à partir de https://www.apachefriends.org/download.html puis suivez les instructions:

  1. Installez et exécutez xampp à partir de http://www.unixmen.com/install-xampp-stack-ubuntu-14-04/ , puis démarrez Apache Web Server et la base de données MySQL à partir de l'interface graphique.
  2. Vous pouvez configurer votre serveur Web à votre guise, mais le serveur Web par défaut est situé à http://localhost:80 et 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 la base de données que vous souhaitez utiliser sur votre Django Project.
  5. Editez votre fichier settings.py comme suit:

    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 préférable):

    Sudo apt-get installez libmysqlclient-dev

    pip installer MySQL-python

  7. C'est ça!! vous avez configuré Django avec MySQL très facilement.

  8. Maintenant, lancez votre projet Django:

    python manage.py migrer

    serveur python manage.py

14
root

En fait, il existe de nombreux problèmes avec différents environnements, python versions, etc. Vous devrez peut-être également installer les fichiers python dev, afin de "forcer" l'installation, je lancerais tous les logiciels suivants:

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 capable d'aller avec la réponse acceptée. Et pouvez supprimer les paquets inutiles si cela est important pour vous.

8
mimoralea

Exécuter ces commandes

Sudo apt-get installez python-dev python3-dev

Sudo apt-get installez libmysqlclient-dev

pip installer MySQL-python

pip installer pymysql

pip installer mysqlclient

puis 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

6
Deepak Kumar

La réponse de Andy est utile, mais si vous souhaitez exposer votre mot de passe de base de données dans votre paramètre Django, je suggère de suivre Django la configuration officielle de la connexion mysql: https: // docs .djangoproject.com/fr/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 les paramètres, 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 utile est de définir votre moteur de stockage pour Django, vous pouvez le vouloir dans votre fichier setting.py:

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

settings.py

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

}

ensuite:

python manage.py migrate

si le succès va générer ces tables:

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 pouvez utiliser mysql.

ceci est un exemple de démonstration, test sur Django version 1.11.5: Django-pool-showcase

3
LuciferJack

Suivez les étapes indiquées afin de 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, let’s 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
1
Shubham Gupta

Vous devez d'abord créer une base de données MySQL. Ensuite, allez dans le fichier settings.py et éditez le dictionnaire 'DATABASES' 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 la configuration de Django afin d'utiliser MySQL sur un serveur virtuel:

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

0
Sibi M