Configurar Django para usar MySQL

171

Quiero alejarme un poco de PHP y aprender Python. Para hacer desarrollo web con Python, necesitaré un marco para ayudar con plantillas y otras cosas.

Tengo un servidor que no es de producción que utilizo para probar todas las cosas de desarrollo web. Es una pila de LAMP Debian 7.1 que ejecuta MariaDB en lugar del paquete común de servidor MySQL.

Ayer instalé Django y creé mi primer proyecto llamado firstweb . Todavía no he cambiado ninguna configuración.

Aquí está mi primer gran pedazo de confusión. En el tutorial seguí al tipo que instaló Django, comenzó su primer proyecto, reinició Apache y Django simplemente trabajó desde entonces. Fue a su navegador y fue a la página predeterminada de Django sin problemas.

Sin embargo, tengo que cd en mi carpeta firstweb y ejecutar

python manage.py runserver myip:port

Y funciona. No hay problema. Pero me pregunto si se supone que funciona así, y si esto causará problemas en el futuro.

Mi segunda pregunta es que quiero configurarlo para que use mi base de datos MySQL. Entro en settings.py bajo / firstweb / firstweb y veo MOTOR y NOMBRE, pero no estoy seguro de qué poner aquí.

Y luego, en las áreas de USUARIO, CONTRASEÑA y ANFITRIÓN, ¿es esta mi base de datos y sus credenciales? Si estoy usando localhost, ¿puedo poner localhost en el área HOST?

Gregor
fuente
Nota: como od 01/2016 no hay un controlador MySQL para python 3.5.x. Consulte stackoverflow.com/questions/34456770/…. Utilice solo hasta Python 3.4. Todavía puede usar Django 1.9 (última versión estable a partir de 01/2016).
Tomas Tintera

Respuestas:

316

El soporte de MySQL es simple de agregar. En su DATABASESdiccionario, tendrá una entrada como esta:

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

También tiene la opción de utilizar archivos de opciones MySQL , a partir de Django 1.7. Puede lograr esto configurando su DATABASESmatriz de la siguiente manera:

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

También debe crear el /path/to/my.cnfarchivo con configuraciones similares desde arriba

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

Con este nuevo método de conexión en Django 1.7, es importante saber el orden en que se establecen las conexiones:

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

En otras palabras, si establece el nombre de la base de datos en OPTIONS, tendrá prioridad sobre NAME, lo que anularía cualquier cosa en un archivo de opción MySQL.


Si solo está probando su aplicación en su máquina local, puede usar

python manage.py runserver

Agregar el ip:portargumento permite que otras máquinas distintas a la suya accedan a su aplicación de desarrollo. Una vez que esté listo para implementar su aplicación, le recomiendo echar un vistazo al capítulo sobre Implementación de Django en el djangobook

El juego de caracteres predeterminado de Mysql a menudo no es utf-8, por lo tanto, asegúrese de crear su base de datos usando este sql:

CREATE DATABASE mydatabase CHARACTER SET utf8 COLLATE utf8_bin

Si está utilizando el conector MySQL de Oracle, su ENGINElínea debería verse así:

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

Tenga en cuenta que primero deberá instalar mysql en su sistema operativo.

brew install mysql (MacOS)

Además, el paquete del cliente mysql ha cambiado para python 3 ( MySQL-Clientfunciona solo para python 2)

pip3 install mysqlclient
Andy
fuente
26

Al principio, ejecute los siguientes comandos para instalar las dependencias de python; de lo contrario, el comando python runserver arrojará un error.

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

Luego configure el archivo settings.py como lo define #Andy y en la última ejecución:

python manage.py runserver

Que te diviertas..!!

Ritesh
fuente
18

Si está utilizando python3.x, ejecute el siguiente comando

pip install mysqlclient

Luego cambie setting.py like

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'DB',
     'USER': 'username',
    'PASSWORD': 'passwd',
  }
  }
Manoj Jadhav
fuente
1
Estoy usando virtualenv con python 3.6. Esto me salva la vida. Gracias. Además, recuerde crear primero DB en mysql
Fred
15

Como todo lo dicho anteriormente, puede instalar fácilmente xampp primero desde https://www.apachefriends.org/download.html Luego siga las instrucciones como:

  1. Instale y ejecute xampp desde http://www.unixmen.com/install-xampp-stack-ubuntu-14-04/ , luego inicie el servidor web Apache y la base de datos MySQL desde la GUI.
  2. Puede configurar su servidor web como lo desee, pero de forma predeterminada el servidor web está en una http://localhost:80base de datos port 3306y PhpMyadmin enhttp://localhost/phpmyadmin/
  3. Desde aquí puede ver sus bases de datos y acceder a ellas utilizando una GUI muy amigable.
  4. Cree cualquier base de datos que desee usar en su Proyecto Django.
  5. Edite su settings.pyarchivo como:

    DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'DB_NAME',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'USER': 'root',
        'PASSWORD': '',
    }}
  6. Instale los siguientes paquetes en virtualenv (si está utilizando django en virtualenv, que es más preferido):

    sudo apt-get install libmysqlclient-dev

    pip install MySQL-python

  7. ¡¡Eso es!! ha configurado Django con MySQL de una manera muy fácil.

  8. Ahora ejecuta tu proyecto Django:

    python manage.py migrate

    Python manage.py runserver

raíz
fuente
7

En realidad, hay muchos problemas con diferentes entornos, versiones de Python, etc. Es posible que también necesite instalar archivos de desarrollo de Python, por lo que para 'fuerza bruta' la instalación ejecutaría todos estos:

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

Debe ser bueno para ir con la respuesta aceptada. Y puede eliminar los paquetes innecesarios si eso es importante para usted.

mimoralea
fuente
7

Ejecute estos comandos

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

Luego configure settings.py como

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

Disfruta de la conexión mysql

Deepak Kumar
fuente
4

La respuesta de Andy ayuda, pero si le preocupa exponer la contraseña de su base de datos en su configuración de django, le sugiero que siga la configuración oficial de django en la conexión mysql: https://docs.djangoproject.com/en/1.7/ref/databases/

Citado aquí como:

# 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

Para reemplazar 'HOST': '127.0.0.1' en la configuración, simplemente agréguelo en my.cnf:

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

Otra OPCIÓN que es útil es configurar su motor de almacenamiento para django, es posible que lo desee en su setting.py:

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

settings.py

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

}

luego:

python manage.py migrate

si el éxito generará estas tablas:

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

y podrás usar mysql.

Este es un ejemplo de escaparate, prueba en Django versión 1.11.5: Django-pool-showcase

LuciferJack
fuente
3
  1. Instalar en pc mysqlclient

sudo pip3 install mysqlclient

si obtiene un error:

El comando "python setup.py egg_info" falló con el código de error 1 en / tmp / pip-install-dbljg4tx / mysqlclient /

luego:

 1. sudo apt install libmysqlclient-dev python-mysqldb

 2. sudo pip3 install mysqlclient

  1. Modificar configuración.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
fuente
1

Siga los pasos dados para configurarlo para usar la base de datos 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
fuente
0

Primero debe crear una base de datos MySQL. Luego, vaya al settings.pyarchivo y edite el 'DATABASES'diccionario con sus credenciales de 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',
 }
}

Aquí hay una guía de instalación completa para configurar Django para usar MySQL en un virtualenv:

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

Sibi M
fuente