Модели
Для хранения данных в веб-приложении, как правило, применются базы данных. И фреймворк Django уже по умолчанию предоставляет удобный функционал для работы с различными системами баз данных.
Настройки подключения к базе данных
По умолчанию Django в качестве базы данных использует SQLite. Она очень проста в использовании и не требует запущенного сервера. Все файлы базы данных могут легко переноситься с одного компьютера на другой. Однако при необходимости мы можем использовать в Django большинство распространенных СУБД.
Для работы с базами данных в проекте Django в файле settings.py определен параметр DATABASES , который по умолчанию выглядит следующим образом:
DATABASES = < 'default': < 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'db.sqlite3', >>
Переменная DATABASES содержит набор конфигураций подключений к базам данных в виде словаря. Ключи в этом словаре — названия подключений. То есть мы можем определить кучу подключений. Но как минимум одно подключение должно быть определено в переменной DATABASES — подключение с именем default , которое представляет подключение по умолчанию.
Конфигурация каждого подключения может состоять из ряда параметров. По умолчанию указываются только два параметра. Параметр ENGINE указывает на используемый движок для доступа к БД. В данном случае это встроенный пакет django.db.backends.sqlite3 .
Второй параметр — NAME указывает на путь к базе данных. По умолчанию база данных называется db.sqlite3 . Для установки пути используется каталог из переменной BASE_DIR, которая задана в начале файла:
BASE_DIR = Path(__file__).resolve().parent.parent
По умолчанию BASE_DIR указывает на каталог, в котором находится папка проекта. И после первого запуска проекта в указанном каталоге по умолчанию будет создан файл db.sqlite3 , который собственно и будет использоваться в качестве базы данных.

Поддерживаемые субд
Чтобы использовать другие системы управления базами данных, необходимо будет установить соответствующий пакет.
Создание приложения Django и подключение к базе данных
Django – это свободный и открытый веб-фреймворк Python, который поддерживает масштабируемость, повторное использование и быструю разработку кода.
В данном мануале вы узнаете, как создать основу для блога и подключить его к базе данных MySQL. Для этого нужно создать «скелет» веб-приложения с помощью django-admin, затем создать БД MySQL и подключить веб-приложение к базе данных.
Требования
- Сервер Ubuntu 16.04, настроенный согласно этому руководству.
- Предварительно установленный фреймворк Django (инструкции по установке и настройке среды разработки вы найдете здесь).
- MySQL (установить эту СУБД вам поможет мануал Установка последней версии MySQL в Ubuntu 16.04).
1: Создание каркаса проекта Django
Чтобы заложить основу приложения, нужно сгенерировать скелет проекта, используя команду django-admin. Этот каркас станет основой приложения для блога.
Перейдите в домашний каталог:
Просмотрите его содержимое:
Если вы выполнили руководство по установке Django, вы увидите такой каталог:
Это скелет проекта, который был сгенерирован для проверки установки.
Этот каталог вам не подойдет. Создайте новый каталог для приложения блога. Выберите для него описательное имя; в руководстве используется my_blog_app.
Перейдите в новый каталог:
Чтобы сгенерировать проект, запустите команду:
django-admin startproject blog
Чтобы убедиться, что все выполнено правильно, попробуйте перейти в каталог blog/:
Каталог blog/ должен появиться в текущем каталоге ~/my_blog_app/ после запуска команды django-admin.
Запустите ls, чтобы убедиться, что все необходимые элементы были созданы. Должен быть каталог blog и файл manage.py:
2: Настройка проекта
Сгенерировав проект, вы создали файл settings.py.
Чтобы блог использовал правильное время, связанное с вашим часовым поясом, отредактируйте файл settings.py. Этот список часовых поясов может вам помочь. В данном примере используется пояс America/New_York.
Откройте каталог, в котором находится нужный файл:
Откройте файл settings.py:
Найдите поле TIME_ZONE:
.
# Internationalization
# https://docs.djangoproject.com/en/1.11/topics/i18n/
LANGUAGE_CODE = ‘en-us’
TIME_ZONE = ‘UTC’
USE_I18N = True
USE_L10N = True
USE_TZ = True
.
Измените часовой пояс:
.
# Internationalization
# https://docs.djangoproject.com/en/1.11/topics/i18n/
LANGUAGE_CODE = ‘en-us’
TIME_ZONE = ‘ America/New_York ‘
USE_I18N = True
.
Не закрывайте файл – далее нужно будет добавить путь к статическим файлам. Файлы, которые обслуживаются веб-приложением Django, называются статическими файлами. К ним относятся любые файлы для отображения веб-страницы, включая JavaScript, CSS и изображения.
Перейдите в конец settings.py и найдите STATIC_ROOT.
.
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.11/howto/static-files/
STATIC_URL = ‘/static/’
STATIC_ROOT = os.path.join(BASE_DIR, ‘static’)
Теперь, когда часовой пояс и путь для статических файлов указаны правильно, нужно добавить ваш IP-адрес в список разрешенных хостов. Перейдите к строке ALLOWED_HOSTS, которая находится в верхней части файла settings.py.
.
# SECURITY WARNING: don’t run with debug turned on in production!
DEBUG = True
ALLOWED_HOSTS = [‘ your server IP address ‘] # Application definition
.
Добавьте в скобки свой IP-адрес, взяв его в одинарные кавычки.
Теперь сохраните и закройте файл.
3: Установка соединения с базой данных MySQL
Чтобы использовать MySQL в проекте, понадобится соединительная библиотека Python 3, совместимая с Django. Установите соединитель баз данных mysqlclient, который является форком MySQLdb.
Согласно документации mysqlclient, «MySQLdb – это поточно-совместимый интерфейс к популярному серверу базы данных MySQL, который предоставляет API баз данных Python». Основное преимущество заключается в том, что mysqlclient поддерживает Python 3.
Для начала установите python3-dev.
sudo apt-get install python3-dev
Затем установите заголовки и библиотеки Python и MySQL.
sudo apt-get install python3-dev libmysqlclient-dev
Когда увидите такое сообщение:
After this operation, 11.9 MB of additional disk space will be used.
Do you want to continue? [Y/n]
Нажмите y и ENTER, чтобы продолжить.
С помощью pip3 установите библиотеку mysqlclient из PyPi:
sudo pip3 install mysqlclient
Команда выведет на экран следующее:
successfully installed mysqlclient
Collecting mysqlclient
Downloading mysqlclient-1.3.10.tar.gz (82kB)
100% |████████████████████████████████| 92kB 6.7MB/s
Building wheels for collected packages: mysqlclient
Running setup.py bdist_wheel for mysqlclient . done
Stored in directory: /root/.cache/pip/wheels/32/50/86/c7be3383279812efb2378c7b393567569a8ab1307c75d40c5a
Successfully built mysqlclient
Installing collected packages: mysqlclient
Successfully installed mysqlclient-1.3.10
4: Создание базы данных
На данный момент у вас есть каркас приложения и соединитель mysqlclient. Теперь можно настроить бэкэнд Django для поддержки MySQL.
Сначала инициируйте сервис MySQL:
systemctl status mysql.service
starting mysql.service
mysql.service — MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2017-08-19 11:59:33 UTC; 1min 44s ago
Main PID: 26525 (mysqld)
CGroup: /system.slice/mysql.service
└─26525 /usr/sbin/mysqld
Теперь вы можете войти в MySQL с помощью учетных данных, используя следующую команду. Флаг -u позволяет указать пользователя, а -p включает запрос пароля MySQL:
mysql -u db_user -p
Примечание: Вместо db_user укажите имя вашего пользователя базы данных.
Когда появится строка:
Укажите пароль своего пользователя БД. После этого на экране появится:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.7.19-0ubuntu0.16.04.1 (Ubuntu)
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.
Запросите список текущих баз данных MySQL:
Команда выведет имена всех БД, которые существуют на данный момент:
Примечание: Если при попытке подключиться вы получили ошибку, убедитесь, что правильно ввели пароль и установили MySQL. Также можно проконсультироваться с руководством по установке и настройке MySQL.
По умолчанию в MySQL есть 4 БД: information_schema, MySQL, performance_schema и sys. Не трогайте их – они содержат важную для сервера MySQL информацию.
Теперь создайте исходную базу данных, в которой будут храниться данные блога.
Для этого запустите эту команду, указав описательное имя для новой БД.
CREATE DATABASE blog_data ;
После успешного создания базы данных вы увидите следующий результат:
Query OK, 1 row affected (0.00 sec)
Примечание: Если вы видите на экране такой вывод:
database creation failed
ERROR 1007 (HY000): Can’t create database blog_data ; database exists
значит, БД с таким именем уже существует. Если же вы видите следующую ошибку MySQL:
database creation failed
ERROR 1064 (42000): You have an error in your SQL syntax;
это означает, что в команде допущена синтаксическая ошибка. Убедитесь, что вы ввели команду точно так, как показано выше.
Снова просмотрите список доступных БД:
В списке должна появиться новая БД blog_data:
+——————-+
| Database |
+——————-+
| information_schema|
| blog_data |
| MySQL |
| performance_schema|
| sys |
+——————-+
5 rows in set (0.00 sec)
База данных для блога полностью готова.
Чтобы выйти из MySQL, нажмите CTRL + D.
5: Настройка соединения базы данных MySQL и приложения
Теперь нужно добавить учетные данные БД в настройки приложения Django.
Примечание: Важно помнить, что настройки соединения согласно документации Django используются в следующем порядке:
– опции
– имя, пользователь, пароль, хост, порт
– файлы параметров MySQL.
Внесите все необходимые поправки.
Перейдите в файл settings.py и замените все текущие строки DATABASES следующими строками. Приложение должно знать, как использовать MySQL в качестве базы данных и из какого файла читать учетные данные для подключения к БД:
# Database
# https://docs.djangoproject.com/en/1.11/ref/settings/#databases
DATABASES = ‘default’: ‘ENGINE’: ‘django.db.backends.mysql’,
‘OPTIONS’: ‘read_default_file’: ‘/etc/mysql/my.cnf’,
>,
>
>
.
Затем нужно указать в конфигурационном файле учетные данные MySQL. Откройте файл в nano и добавьте следующую информацию:
sudo nano /etc/mysql/my.cnf
.
[client] database = db_name
user = db_user
password = db_password
default-character-set = utf8
utf8 устанавливается как шифрование по умолчанию, это обычный способ кодирования данных Unicode в MySQL.
После этого перезапустите MySQL:
systemctl daemon-reload
systemctl restart mysql
Это займет несколько минут.
6: Проверка соединения между приложением и БД MySQL
Теперь нужно убедиться, что приложение Django может подключиться к MySQL. Для этого просто запустите сервер. Если запустить его не получится, значит, соединение не получается создать. В противном случае соединение работает.
Перейдите в следующий каталог:
python3 manage.py runserver your-server-ip :8000
Performing system checks.
System check identified no issues (0 silenced).
You have 13 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run ‘python manage.py migrate’ to apply them.
August 19, 2017 — 15:45:39
Django version 1.11.4, using settings ‘blog.settings’
Starting development server at http:// your-server-ip :8000/
Quit the server with CONTROL-C.
Следуя инструкциям из вывода, перейдите по следующей ссылке:
http:// your-server-ip :8000/
чтобы просмотреть веб-приложение и убедиться, что оно работает правильно. Вы должны увидеть страницу:
It worked!
Congratulations on your first Django powered page.
Если такая страница появилась – приложение Django работает правильно!
Как подключить MySQL к Django за 5 шагов
База данных является важным компонентом веб-приложения для хранения и организации данных. Всякий раз, когда мы разрабатываем приложение или веб-сайт, нам нужно выбрать подходящую базу данных, которая сделает его более интерактивным.
Django поставляется со встроенной базой данных SQLite. Однако мы можем использовать различные базы данных в Django. Ниже приведены списки баз данных, которые поддерживает Django.
Есть также ряд серверных баз данных, предоставленных третьими сторонами. Промежуточное ПО Django позволяет нам взаимодействовать с базой данных. В этом руководстве мы узнаем, как подключить базу данных MySQL к нашему приложению Django.
Предпосылки
- Сервер MySQL 5.7+ должен быть установлен;
- Python 3.0+ должен быть установлен.
Мы предполагаем, что вы уже установили сервер MySQL на свой локальный компьютер. Если вы не установили его, загрузите его с официального сайта MySQL.
Выполнение
Мы используем следующие шаги, чтобы установить соединение между Django и MySQL.
Шаг – 1. Создайте виртуальную среду и настройте проект Django.
Сначала мы создадим виртуальную среду и установим в нее Django. Мы пропускаем этот процесс, так как он удлиняет урок. Мы создаем новый проект, используя следующую команду.
django-admin startproject MyProject .
Точка(.) в конце команды означает, что мы создаем проект в рабочем каталоге. Если период не указан, проект будет создан в новом каталоге с именем MyProject, и внутри этого каталога будут содержаться наши настоящие файлы django.
Теперь запустите сервер с помощью приведенной ниже команды.
python manage.py runserver
Терминал отобразит ссылку http://127.0.0.1:8000, перейдите по этой ссылке.
Шаг – 2. Создайте новую базу данных.
Мы можем создать базу данных двумя способами — MySQL Workbench и MySQL shell. MySQL Workbench — это инструмент с графическим интерфейсом для базы данных MySQL, который предоставляет такие функции, как разработка SQL, моделирование данных и администрирование сервера. Мы будем использовать оболочку MySQL, которая более рекомендуема для учебных целей.
- Подключить сервер MySQL.

- Создать базу данных с помощью SQL-запросов.
Используйте запрос создания базы данных my_database. Это создаст новую базу данных.

Мы можем проверить базы данных с помощью запроса show databases.
mysql> show databases;
+--------------------------------------+ | Database | +--------------------------------------+ | information_schema | | my_database | | mysql | | performance_schema | | sys | +---------------------------------------+ 5 rows in set(0.05 sec)
Он показывает всю доступную базу данных на нашем сервере MySQL.
Шаг – 3. Обновите файл settings.py.
Когда мы закончим создание базы данных, мы должны обновить раздел базы данных файла settings.py со следующей конфигурацией параметров.
DATABASES = < 'default': < 'ENGINE': 'django.db.backends.mysql', 'NAME': 'my_database', 'USER': 'root', 'PASSWORD': 'your_password', 'HOST': '127.0.0.1', 'PORT': '3306', 'OPTIONS': < 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'" >> >
Давайте разберемся, что мы сделали выше.
- Во-первых, мы заменили «django.db.backends.sqlite3» на «django.db.backends.mysql». Это в основном указывает на то, что мы переносим SQLite на базу данных MySQL.
- NAME указывает имя базы данных, которую мы хотим использовать.
- USER — это имя пользователя MYSQL, который имеет доступ к базе данных и действует как администратор базы данных.
- PASSWORD — пароль базы данных. Он будет создан во время установки MySQL.
- «HOST» — «127.0.0.1», а «PORT» «3306» указывает, что база данных MySQL размещена с именем хоста «0.0.1» и прослушивает конкретный номер порта — 3306.
- В последней строке мы используем SET sql_mode = ‘STATIC_TRANS_TABLES’, который используется для обработки недопустимых или отсутствующих значений, сохраняемых в базе данных операторами INSERT и UPDATE.
Шаг – 4. Установите пакет mysqlclient.
Перед установкой пакета mysqlclient давайте разберемся, что такое mysqlclient и почему мы его используем. mysqlclient — это интерфейс Python для MySQL, который позволяет проекту Python подключаться к серверу MySQL.
Поэтому необходимо установить пакет mysqlclient, чтобы установить соединение между MySQL и Django. Для установки используйте следующую команду в рабочем каталоге.
pip install mysqlclient
Шаг – 5. Запустите команду миграции.
Теперь мы готовы к миграции или созданию таблиц во вновь созданной базе данных. На этом последнем шаге мы запустим команду migrate, и она создаст существующие таблицы в базе данных my_database.
python manage.py migrate
После запуска этой команды Django автоматически создаст необходимые таблицы, такие как auth_group, auth_user, auth_permission и т. д. Он также создаст таблицы, определенные в файле models.py.
mysql> use my_database;
База данных изменена.
mysql> show tables;
+-------------------------------------------------------+ | Tables_in_my_database | +-------------------------------------------------------+ | 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 | | myweatherapp_profile | +---------------------------------------------------------+ 11 rows in set(0.05 sec)

Вывод
В этом руководстве мы обсудили, как мы можем использовать базу данных MySQL в Django. Хотя Django поставляется со встроенной базой данных SQLite, иногда она не соответствует требованиям. Таким образом, мы можем подключаться к различным базам данных.
Connect Django to MySQL Database

- Initial Setup of Connecting MySQL to Django
- Django MySQL Connection Settings
When working with databases, we have a lot of options on the list. We can choose among relational databases or SQL databases such as MySQL, PostgreSQL, SQL Server, SQLite, MariaDB, and non-relational databases or non-SQL databases such as MongoDB and Redis Couchbase.
Since Django is a full-fledged robust web framework, it is compatible with almost all databases. We might have to do some extra work on our end or maybe use some plugins or applications for specific databases, but Django official supports PostgreSQL, MariaDB, MySQL, Oracle, and SQLite.
This article talks about how to connect MySQL to Django.
Initial Setup of Connecting MySQL to Django
Before proceeding with the connection settings, make sure that you have MySQL set up on your system. Make sure that you have an account created and databases created that you wish to connect.
Moreover, you will also require a MySQL Client to interact with the databases using Python (3.X versions).
The MySQL client can be downloaded using the following pip command.
pip install mysqlclient
pip3 install mysqlclient
Django MySQL Connection Settings
Django, by default, uses the SQLite database. The connection settings for the same looks like this.
DATABASES = "default": "ENGINE": "django.db.backends.sqlite3", "NAME": BASE_DIR / "db.sqlite3", > >
To connect Django to the MySQL database, we have to use the following settings.
DATABASES = "default": "ENGINE": "django.db.backends.mysql", "NAME": "databaseName", "USER": "databaseUser", "PASSWORD": "databasePassword", "HOST": "localhost", "PORT": "portNumber", > >
The ENGINE key for MySQL database varies. Apart from that, there are a few extra keys such as USER , PASSWORD , HOST , and PORT .
| NAME | This key stores the name of your MySQL database. |
| USER | This key stores the username of your MySQL account using which the MySQL database will be connected. |
| PASSWORD | This key stores the password of that MySQL account. |
| HOST | This key stores the IP Address on which your MySQL database is hosted. |
| PORT | This key stores the port number on which your MySQL database is hosted. |
Lastly, make the required migrations using python manage.py makemigrations and python manage.py migrate to complete the setup.
Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.