
Django по умолчанию работает с SQLite, но при создании проектов, рассчитанных на реальную нагрузку, часто требуется переход на MySQL. Эта СУБД удобна для приложений, где важны транзакции, строгая структура данных и масштабирование. Перед началом настройки стоит убедиться, что установлен MySQL Server, создан пользователь с доступом к базе и задан кодировочный набор utf8mb4, поскольку он корректно сохраняет Unicode-символы, включая эмодзи.
Для взаимодействия Django с MySQL нужен драйвер. Чаще всего выбирают mysqlclient, так как он использует нативные MySQL-библиотеки. В случае отсутствия необходимых зависимостей можно использовать PyMySQL, подключив его вручную через отдельный импорт в проекте.
После установки драйвера необходимо изменить параметр DATABASES в settings.py: указать тип движка django.db.backends.mysql, имя базы, пользователя, пароль и порт. При некорректной конфигурации Django не выполнит миграции и вернет сообщение об ошибке, поэтому на этом этапе важно проверить доступность сервера MySQL через консоль или клиент mysql.exe.
Перед первым запуском миграций стоит убедиться, что у пользователя достаточно прав: CREATE, ALTER, INSERT, SELECT, UPDATE и DELETE. Если права ограничены, некоторые таблицы Django, включая auth и sessions, не будут созданы. После успешного запуска миграций можно переходить к тестированию моделей через Django Shell или админку.
Установка MySQL и подготовка учетной записи для проекта
Перед подключением MySQL к Django необходимо установить сервер MySQL. На Windows удобнее использовать официальный установщик MySQL Installer, на Linux – пакетный менеджер: apt install mysql-server для Debian/Ubuntu или yum install mysql-server для CentOS. После установки важно проверить, что служба запущена, выполнив systemctl status mysql или открыв список служб Windows.
При первом запуске MySQL следует задать пароль для root. Для изоляции доступа создается отдельный пользователь для Django-проекта. Команда для создания базы данных:
CREATE DATABASE django_app CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Создание пользователя и назначение доступа выполняется через консоль MySQL:
CREATE USER ‘django_user’@’localhost’ IDENTIFIED BY ‘пароль’;
GRANT ALL PRIVILEGES ON django_app.* TO ‘django_user’@’localhost’;
FLUSH PRIVILEGES;
Для подключения с других хостов требуется заменить ‘localhost’ на ‘%’ и убедиться, что в конфигурации MySQL разрешены внешние подключения. Файл конфигурации обычно находится по пути: /etc/mysql/mysql.conf.d/mysqld.cnf. В параметре bind-address необходимо использовать 0.0.0.0, затем перезапустить службу MySQL.
После выполнения всех шагов можно проверить доступность учетной записи командой mysql -u django_user -p django_app. Успешная авторизация означает, что база данных готова к интеграции с Django.
Установка mysqlclient или PyMySQL для работы с MySQL
Django не взаимодействует с MySQL напрямую, поэтому требуется дополнительный драйвер. Наиболее распространенный вариант – mysqlclient. Он использует нативные библиотеки MySQL, что обеспечивает стабильную работу. Перед установкой в Windows необходимо установить Microsoft Build Tools. В Linux требуется пакет libmysqlclient-dev или mariadb-dev, в зависимости от дистрибутива.
Установка mysqlclient через pip выполняется командой:
pip install mysqlclient
Если mysqlclient не устанавливается из-за отсутствия системных библиотек или ограничений окружения, используется альтернатива – PyMySQL. Этот драйвер полностью на Python и не требует компиляции. Его установка выполняется командой:
pip install PyMySQL
Для работы PyMySQL требуется дополнительное подключение в коде проекта. В файл __init__.py корневого модуля Django добавляется строка:
import pymysql; pymysql.install_as_MySQLdb()
После установки драйвера стоит выполнить проверку с помощью команды python manage.py runserver или миграции. Если возникает ошибка импорта или отсутствия клиента MySQL, следует убедиться, что драйвер установлен в том же окружении, где работает Django.
Изменение DATABASES в settings.py под MySQL
После установки драйвера необходимо изменить конфигурацию подключения к базе данных в файле settings.py. Django использует словарь DATABASES, где задаются параметры для выбранного движка. Для MySQL используется строка движка «django.db.backends.mysql».
Пример настроек подключения:
DATABASES = {
‘default’: {
‘ENGINE’: ‘django.db.backends.mysql’,
‘NAME’: ‘django_app’,
‘USER’: ‘django_user’,
‘PASSWORD’: ‘пароль’,
‘HOST’: ‘localhost’,
‘PORT’: ‘3306’,
‘OPTIONS’: {
‘charset’: ‘utf8mb4’
}
}
}
Поле NAME соответствует имени созданной базы данных. HOST должен быть указан как localhost, если Django и MySQL запущены на одном сервере. Значение PORT по умолчанию – 3306, но может отличаться при использовании Docker или удаленного сервера.
Параметр charset в секции OPTIONS обязателен, иначе возможны ошибки при сохранении Unicode-символов. Если используется PyMySQL, он автоматически подстраивается под эту конфигурацию как MySQLdb.
После внесения изменений требуется сохранить файл и выполнить проверку подключений через запуск миграций. Ошибки авторизации или отсутствия базы данных говорят о неверных значениях параметров USER, PASSWORD или NAME.
Настройка параметров подключения: HOST, PORT, USER, PASSWORD
Параметры HOST, PORT, USER и PASSWORD определяют способ подключения Django к серверу MySQL. Эти данные должны совпадать с настройками созданной базы и учетной записи MySQL. Неверный порт или имя пользователя приведут к ошибкам авторизации или тайм-ауту соединения.
| Параметр | Значение | Комментарий |
|---|---|---|
| HOST | localhost или IP-адрес | Используется localhost, если сервер и Django находятся на одной машине |
| PORT | 3306 | Стандартный порт MySQL, но может быть изменён в настройках сервера |
| USER | django_user | Пользователь, созданный специально для проекта |
| PASSWORD | установленный пароль | Должен совпадать с данными MySQL |
При использовании внешнего сервера HOST должен содержать публичный IP MySQL и доступ к нему должен быть разрешён. В контейнерных окружениях (например, Docker) вместо localhost указывается имя сервиса, например db.
Если MySQL работает в режиме ограниченного доступа, потребуется открыть порт с помощью firewall-инструментов. Для Linux это может быть команда:
ufw allow 3306
После корректного заполнения параметров рекомендуется выполнить тест с помощью команды:
python manage.py migrate
Проверка подключения через python manage.py migrate
После настройки параметров подключения необходимо выполнить миграции. Команда python manage.py migrate создаёт таблицы, используемые Django: auth, sessions, admin и другие системные модели. Если подключение к MySQL настроено правильно, процесс завершится без ошибок, а таблицы появятся в базе данных.
При выполнении миграций могут возникнуть сообщения об ошибках. Ошибка Access denied указывает на неверные значения USER или PASSWORD. Ошибка Unknown database означает, что база не создана или указанное имя не совпадает с существующим. Ошибка Can’t connect to MySQL server свидетельствует о неверном портe или недоступности MySQL-сервера.
Для проверки появления таблиц можно использовать консоль MySQL:
SHOW TABLES IN django_app;
Если таблицы отображаются, значит Django подключён к MySQL и можно переходить к созданию моделей и тестированию проекта.
Создание таблиц и моделей для тестирования работы

Пример создания простой модели в файле models.py:
- class Product(models.Model):
- name = models.CharField(max_length=100) – название продукта
- price = models.DecimalField(max_digits=10, decimal_places=2) – цена с двумя знаками после запятой
- created_at = models.DateTimeField(auto_now_add=True) – дата создания записи
Для применения модели выполняются следующие шаги:
- Создать миграции: python manage.py makemigrations
- Применить миграции: python manage.py migrate
- Проверить наличие таблицы в MySQL: SHOW TABLES IN django_app;
После этого можно добавлять тестовые записи через Django Shell:
- python manage.py shell
- Импорт модели: from app.models import Product
- Создание записи: Product.objects.create(name=’Test’, price=100.50)
Такой подход позволяет убедиться в правильной настройке драйвера, корректной кодировке и полном доступе Django к MySQL для операций INSERT и SELECT.
Проверка связи модели с базой данных через Django shell

Django Shell позволяет проверить корректность работы моделей с MySQL без запуска веб-сервера. Для начала откройте интерактивную оболочку командой:
python manage.py shell
Далее выполняются шаги для тестирования модели:
- Импорт модели: from app.models import Product
- Создание новой записи:
- product = Product.objects.create(name=’Тестовый товар’, price=199.99)
- Проверка сохранения записи:
- Product.objects.filter(name=’Тестовый товар’) – выборка по конкретному полю
- Редактирование записи:
- product.price = 249.99
- product.save() – сохранение изменений в базе
- Удаление записи:
- product.delete() – проверка возможности удаления
Если все операции выполняются без ошибок, значит Django корректно взаимодействует с MySQL, поддерживает операции INSERT, SELECT, UPDATE и DELETE, а таблицы и поля соответствуют структурам моделей.
Распространенные ошибки подключения и их причины
При подключении Django к MySQL часто встречаются типовые ошибки, каждая из которых имеет конкретные причины и методы устранения.
1. Access denied for user
Причина: неверно указан USER или PASSWORD в settings.py, либо пользователь не имеет прав на указанную базу данных. Решение: проверить учетную запись MySQL и права доступа через GRANT ALL PRIVILEGES ON база.* TO ‘user’@’host’; FLUSH PRIVILEGES;.
2. Unknown database
Причина: база данных не создана или указано неправильное имя в NAME. Решение: создать базу через CREATE DATABASE django_app CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; и проверить соответствие имени в settings.py.
3. Can’t connect to MySQL server
Причина: неверный HOST или PORT, MySQL-сервер не запущен, либо порт заблокирован firewall. Решение: убедиться, что служба MySQL активна, порт доступен, а при удаленном подключении MySQL разрешает вход с вашего IP.
4. Driver not installed
Причина: отсутствует mysqlclient или PyMySQL. Решение: установить драйвер командой pip install mysqlclient или pip install PyMySQL и при использовании PyMySQL добавить pymysql.install_as_MySQLdb() в __init__.py.
5. Unicode or encoding errors
Причина: неправильная кодировка базы или отсутствие параметра charset в OPTIONS. Решение: использовать utf8mb4 при создании базы и добавить ‘charset’: ‘utf8mb4’ в settings.py.
Вопрос-ответ:
Какие шаги нужны для подключения MySQL к Django на чистой установке?
Необходимо установить MySQL Server и создать базу данных с соответствующей кодировкой utf8mb4. Затем создается пользователь с правами на эту базу. После этого устанавливается драйвер для Python — mysqlclient или PyMySQL. В файле settings.py указываются параметры подключения: ENGINE, NAME, USER, PASSWORD, HOST и PORT. После настройки выполняются миграции через python manage.py migrate для проверки соединения.
Почему при миграции возникает ошибка Access denied for user?
Эта ошибка возникает, когда указанные USER или PASSWORD не совпадают с учетной записью MySQL, либо у пользователя нет необходимых прав. Проверяется корректность учетной записи и прав с помощью команд GRANT и FLUSH PRIVILEGES. Также стоит убедиться, что HOST соответствует указанному адресу сервера MySQL.
Можно ли использовать PyMySQL вместо mysqlclient и как это настроить?
Да, PyMySQL полностью на Python и не требует компиляции. После установки через pip: pip install PyMySQL нужно в __init__.py корневого модуля проекта добавить строку import pymysql; pymysql.install_as_MySQLdb(). После этого Django будет воспринимать PyMySQL как MySQLdb, и настройки в settings.py остаются стандартными.
Как проверить, что модели Django корректно работают с MySQL?
Для проверки используется Django Shell. Командой python manage.py shell открывается интерактивная оболочка. Импортируются модели, создаются тестовые записи через Model.objects.create(), проверяется выборка Model.objects.all(), обновление полей и удаление записей. Если все операции выполняются без ошибок, связь с базой работает корректно.
Какие причины могут вызвать ошибку Can’t connect to MySQL server?
Основные причины: MySQL-сервер не запущен, указан неверный HOST или PORT, порт заблокирован firewall, либо база настроена только для локальных подключений. Для исправления проверяют статус службы MySQL, настройки bind-address, доступность порта и корректность указания адреса сервера в settings.py.
Как правильно настроить кодировку MySQL для работы с Django и избежать проблем с Unicode?
Для корректного сохранения символов, включая кириллицу и эмодзи, при создании базы данных необходимо использовать кодировку utf8mb4 и сопоставление utf8mb4_unicode_ci. В settings.py в секции DATABASES нужно добавить параметр ‘OPTIONS’: {‘charset’: ‘utf8mb4’}. Это обеспечит правильное сохранение и чтение данных из Django и предотвратит ошибки при миграциях или вставке текста через модели.
