Настройка Django для использования MySQL


172

Я хочу немного отойти от PHP и изучить Python. Для того чтобы заниматься веб-разработкой на Python, мне понадобится инфраструктура, которая поможет с шаблонами и другими вещами.

У меня есть непроизводственный сервер, который я использую для тестирования всех вещей веб-разработки. Это стек Debian 7.1 LAMP, который запускает MariaDB вместо стандартного пакета MySQL-сервера.

Вчера я установил Django и создал свой первый проект под названием firstweb . Я еще не изменил никаких настроек.

Вот мой первый большой беспорядок. В этом уроке я следил за тем, как парень установил Django, запустил свой первый проект, перезапустил Apache, и с тех пор Django просто работал. Он зашел в свой браузер и без проблем зашел на страницу по умолчанию в Django.

Мне, однако, я должен зайти в мою папку firstweb и запустить

python manage.py runserver myip:port

И это работает. Нет проблем. Но мне интересно, если это должно работать так, и это вызовет проблемы в будущем?

Мой второй вопрос - я хочу настроить его так, чтобы он использовал мою базу данных MySQL. Я захожу в файл settings.py в / firstweb / firstweb и вижу ДВИГАТЕЛЬ и ИМЯ, но я не уверен, что здесь поставить.

А затем в областях USER, PASSWORD и HOST это моя база данных и ее учетные данные? Если я использую localhost, могу ли я просто поместить localhost в область HOST?


Примечание: по состоянию на 01.01.2016 г. отсутствует драйвер MySQL для python 3.5.x. См. Stackoverflow.com/questions/34456770/… Так что используйте только до Python 3.4. Вы все еще можете использовать Django 1.9 (последний стабильный выпуск от 01/2016).
Томас Тинтера

Ответы:


317

Поддержка MySQL проста в добавлении. В вашем DATABASESсловаре у вас будет такая запись:

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

У вас также есть возможность использовать файлы опций MySQL , начиная с Django 1.7. Вы можете сделать это, установив ваш DATABASESмассив следующим образом:

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

Вам также необходимо создать /path/to/my.cnfфайл с аналогичными настройками сверху

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

С этим новым методом соединения в Django 1.7 важно знать, что порядок соединений установлен:

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

Другими словами, если вы задаете имя базы данных в OPTIONS, это будет иметь приоритет над NAME, что переопределит что-либо в файле параметров MySQL.


Если вы просто тестируете свое приложение на локальном компьютере, вы можете использовать

python manage.py runserver

Добавление ip:portаргумента позволяет другим компьютерам, кроме вашей, получить доступ к вашему приложению для разработки. Когда вы будете готовы развернуть свое приложение, я рекомендую взглянуть на главу Развертывание Django в djangobook

Набор символов Mysql по умолчанию часто не utf-8, поэтому убедитесь, что создали свою базу данных, используя этот sql:

CREATE DATABASE mydatabase CHARACTER SET utf8 COLLATE utf8_bin

Если вы используете соединитель MySQL от Oracle, ваша ENGINEстрока должна выглядеть следующим образом:

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

Обратите внимание, что сначала вам необходимо установить mysql в вашей ОС.

brew install mysql (MacOS)

Кроме того, клиентский пакет mysql был изменен для Python 3 ( MySQL-Clientработает только для Python 2)

pip3 install mysqlclient

26

Прежде всего, пожалуйста, запустите приведенные ниже команды для установки зависимостей Python, в противном случае команда python runserver выдаст ошибку.

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

Затем настройте файл settings.py как определено #Andy и при последнем выполнении:

python manage.py runserver

Радоваться, веселиться..!!


18

Если вы используете python3.x, то выполните команду ниже

pip install mysqlclient

Затем измените setting.py как

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

1
Я использую virtualenv с питоном 3.6. Это спасает мою жизнь. Спасибо. Кроме того, не забудьте сначала создать базу данных в mysql
Фред

15

Как уже говорилось выше, вы можете легко установить xampp сначала с https://www.apachefriends.org/download.html Затем следуйте инструкциям, как:

  1. Установите и запустите xampp с http://www.unixmen.com/install-xampp-stack-ubuntu-14-04/ , затем запустите веб-сервер Apache и базу данных MySQL из графического интерфейса.
  2. Вы можете настроить свой веб-сервер так, как вам нравится, но по умолчанию веб-сервер находится в, http://localhost:80а база данных - в port 3306, а PhpMyadmin - вhttp://localhost/phpmyadmin/
  3. Отсюда вы можете просматривать свои базы данных и получать к ним доступ через очень дружественный графический интерфейс.
  4. Создайте любую базу данных, которую вы хотите использовать в своем проекте Django.
  5. Отредактируйте ваш settings.pyфайл как:

    DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'DB_NAME',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'USER': 'root',
        'PASSWORD': '',
    }}
  6. Установите следующие пакеты в virtualenv (если вы используете django для virtualenv, что более предпочтительно):

    sudo apt-get установить libmysqlclient-dev

    pip install MySQL-python

  7. Это оно!! вы настроили Django с MySQL очень простым способом.

  8. Теперь запустите ваш проект Django:

    Python manage.py мигрировать

    python manage.py runserver


7

На самом деле, есть много проблем с различными средами, версиями Python и так далее. Вам также может понадобиться установить файлы разработчика Python, поэтому для «грубой силы» установки я запустил бы все это:

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

Вы должны быть хорошо, чтобы пойти с принятым ответом. И можете удалить ненужные пакеты, если это важно для вас.


7

Запустите эти команды

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

Затем настройте settings.py как

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

Наслаждайтесь подключением mysql


4

Ответ Энди помогает, но если у вас есть сомнения по поводу раскрытия пароля вашей базы данных в настройках django, я предлагаю следовать официальной конфигурации django при подключении к mysql: https://docs.djangoproject.com/en/1.7/ref/databases/.

Цитируется здесь как:

# 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

Чтобы заменить «HOST»: «127.0.0.1» в настройках, просто добавьте его в my.cnf:

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

Еще одна полезная опция - установить движок хранилища для django, вы можете захотеть сделать это в вашем 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,
    },
}

}

затем:

python manage.py migrate

если успех сгенерирует тезисные таблицы:

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

и вы можете использовать MySQL.

это пример демонстрации, тест на Django версии 1.11.5: Django-pool-showcase


3
  1. устанавливать mysqlclient

sudo pip3 install mysqlclient

если вы получили ошибку:

Сбой команды "python setup.py egg_info" с кодом ошибки 1 в / tmp / pip-install-dbljg4tx / mysqlclient /

затем:

 1. sudo apt install libmysqlclient-dev python-mysqldb

 2. sudo pip3 install mysqlclient

  1. Изменить 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

Выполните данные шаги, чтобы настроить его на использование базы данных 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

Сначала вы должны создать базу данных MySQL. Затем перейдите к settings.pyфайлу и отредактируйте 'DATABASES'словарь с вашими учетными данными 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',
 }
}

Вот полное руководство по установке Django для использования MySQL на virtualenv:

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.