- Инструкция: как перевести проект Django с SQLite на MySQL без боли
- Поднимаем Django стек на MS Windows
- Python
- Устанавливаем mod_wsgi
- Apache
- PostgreSQL
- Устанавливаем web приложение
- Django, начало работы с базой данных
- Знакомство с django, Работа с БД.
- Первым шаг. Создание проекта
- Второй шаг, Настройка БД
- Третий шаг, Создание приложения.
- Четвёртый шаг, Описание модели.
- Пятый шаг. Работа с БД в интерпретаторе.
- Ниже представлены варианты вставки данных в БД
- Теперь нужно поговорить о выборе данных из таблиц.
- Давайте рассмотрим варианты обновления записей.
- Последнее, что хочется описать, это удаление записей из БД.
Инструкция: как перевести проект Django с SQLite на MySQL без боли
SQLite3 является СУБД-движком по умолчанию в Python веб-фреймворке Django, а также, как сообщается на официальном сайте проекта, самым часто используемым движком в мире. И он отлично походит для быстрого прототипирования веб-проекта, однако имеет ряд недостатков, о которых мы рассказывали в одной из статей на нашем сайте, и по мере роста веб-приложения приходится переходить на полнофункциональную РСУБД — например, MySQL. И здесь разработчик может столкнуться с проблемами. Мы предлагаем воспользоваться нижеследующей инструкцией, чтобы их избежать или хотя бы максимально снизить вероятность их появления.
Инструкция написана для следующей конфигурации: Ubuntu 16.04, Python 3.5.2, Django 1.10.4.
- Установка сервера и консольного клиента MySQL:
В процессе установки сервера перед вами появится окошко с предложением задать пароль для root-пользователя MySQL.
Создание базы данных для работы веб-приложения Django:
Вы перейдете в консольный клиент MySQL. Введите пароль root-пользователя, заданный в диалоговом окне на предыдущем шаге. В консольном клиенте введите следующую команду:
Замените «someapp» на название вашего приложения в Django. Задание CHARACTER SET необходимо для корректной работы Django с базой данных.
Создание отдельного пользователя для Django в MySQL:
Укажите свой пароль вместо «password» и название своего приложения вместо «someapp». Второй и третьей командой пользователю django выдаются права на созданную ранее таблицу.
Обратите внимание, что mysqlclient является форком официального драйвера MySQLdb, но мы используем первый, потому что он поддерживает Python 3. На момент написания статьи MySQLdb не поддерживает третью версию языка.
Создание дампа данных:
При выполнении этой команды все еще используется SQLite БД — именно из нее выгружаются данные.
Изменение настроек проекта на использование MySQL:
Замените «someapp» на название созданной вами для приложения базы данных. Также обратите внимание, что вам необходимо задать корректный путь к файлу в первом фрагменте кода.
Теперь ваши данные успешно перенесены в СУБД MySQL. В случае если у вас возникнут трудности при точном следовании этой инструкции, сообщайте в комментариях к этой статье — будем разбираться и добавлять примечания, чтобы сформировать универсальное руководство.
Основано на ответе пользователя Carlos Henrique Cano на Stack Overflow и собственном опыте
Поднимаем Django стек на MS Windows
В данной статье будет представлена подробная инструкция по установке и настройке программ Apache, Python и PostgreSQL для обеспечения работы Django проекта в ОС MS Windows. Django уже включает в себя упрощенный сервер разработки для локального тестирования кода, но для задач, связанных с продакшен, требуется более безопасный и мощный веб-сервер. Мы настроим mod_wsgi для взаимодействия с нашим проектом и настроим Apache в качестве шлюза в внешний мир.
Стоит отметить, что установка и настройка будет производиться в ОС MS Windows 10 с 32 разрядностью. Также 32 битная реакция будет универсальна и будет работать на 64 битной архитектуре. Если вам нужна 64 битная установка повторите те же действия для 64 битных дистрибутивов программ, последовательность действий будет идентична.
В качестве Django проекта будем использовать программу Severcart. Она предназначена для управления перемещениями картриджей, учёта печатающего оборудования и договоров поставки и обслуживания. Установка всех программ и модулей будет производиться в каталог C:\severcart. Местоположение не принципиально.
Python
Первым шагом является загрузка и установка Python с веб-сайта Python. Выбираем Windows в качестве операционной системы и 32-битную версию. На момент написания статьи текущей версией является 3.9.0rc2.
Загрузив файл установки, щелкните правой кнопкой мыши файл установки и выберите «Запуск от имени администратора». Вы должны увидеть экран ниже
Устанавливаем галочки напротив чекбоксов «Install launcher for add user (recomended)» и «Add Python 3.9 to PATH» и нажимаем на «Customize installation».
Устанавливаем галочки на против «pip», «py launcher», «for all users (requires elevation)» и нажимаем «Next».
Выбираем все поля ввода как на картинке выше и нажимаем на «Install».
Чтобы убедиться, что установка прошла успешно, откройте cmd и введите python. Если установка прошла успешно, вы должны увидеть приглашение, подобный приведенному ниже
Устанавливаем mod_wsgi
gohlke/pythonlibs. Модуль выполняет функции посредника межу сервером Apache и Django проектом. Самый свежий пакет будет с именем mod_wsgi-4.7.1-cp39-cp39-win32.whl. Обратите внимание, что пакет скомпилирован для 32 битной Windows CPython версии 3.9. Также стоит отметить, что очевидная установка модуля pip install mod_wsgi скорее всего завершится ошибкой, т.к. в процессе установки потребуется компилятор Visual Studio C++. Ставить компилятор целиком ради одного Python пакета в Windows считаем нецелесообразным.
Устанавливаем модуль с помощью стандартного пакетного менеджера pip в cmd или powershell:
Apache
Скачиваем дистрибутив с сайта https://www.apachelounge.com/download/.
Самая свежая версия Web-сервера является Apache 2.4.46 win32 VS16. Также для работы программы понадобиться заранее установленный пакет «Visual C++ Redistributable for Visual Studio 2019 x86».
Распаковываем дистрибутив Apache в каталог C:\severcart\Apache24, далее меняем строку с номером 37 на свою
Проверяем работу Apache, выполнив в командной строке
В результате должны увидеть в браузере по адресу 127.0.0.1 строку «It works!».
Устанавливаем службу Apache, для этого выполним в командной строке от имени Администратора инструкцию:
Далее подключим модуль mod_wsgi к Apache. Для этого выполним в командной строке инструкцию
В результате в стандартный вывод будет распечатаны строки:
Создаем файл C:\severcart\Apache24\conf\extra\httpd-wsgi.conf и копипастим туда распечатанные строки выше.
Подключаем новую конфигурацию к основному файлу httpd.conf
Include conf/extra/httpd-wsgi.conf
Сохраняем изменения, перезагружаем службы Apache
PostgreSQL
Устанавливаем PostgreSQL взятый с сайта https://postgrespro.ru/windows. Текущая версия программного продукта – 12. Преимущества Российского дистрибутива от канонического представлены на том же сайте.
Действия по установке представлены выше и комментариях не нуждаются. Установка крайне проста.
Создаем БД в postgres, где потом будут храниться структуры данных Django проекта
БД создана. Теперь разворачиваем Django проект.
Устанавливаем web приложение
Для этого скачиваем zip архив с сайта https://www.severcart.ru/downloads/ и распаковываем в каталог C:\severcart\app\
Вносим изменения в главный конфигурационный файл C:\severcart\app\conf\settings_prod.py для указания реквизитов подключения к БД
Python словарь DATABASES содержит в себе реквизиты подключения к БД. Подробности по настройке читайте здесь https://docs.djangoproject.com/en/3.1/ref/databases/#connecting-to-the-database
Устанавливаем Python пакеты значимостей для работы приложений внутри Django проекта
В процессе работы скрипта будет произведена инициализация БД таблицами, констрейтами, индексами и прочим, а будет предложено создать пользователя, от имени которого будет производиться работа в программе.
Подключаем Django приложение к серверу Apache для этого дополняем конфигурационный файл
httpd-wsgi.conf следующим текстом
Перезагружаем службу Apache и проверяем работу приложения
На этом все. Спасибо что дочитали.
В следующей статье будем создавать установочный самораспаковывающийся архив в InnoSetup для быстрого развертывания Django проекта на компьютере заказчика. Для тех кто хочет повторить все действия на Яндекс.Диск загружены все используемые дистрибутивы.
Django, начало работы с базой данных
Знакомство с django, Работа с БД.
На Хабре существует много тем о django, с описанием различных вкусностей. Но мне не встречался пост, про начало пути, так сказать для новичка. Так что хочется написать короткое руководство начинающего бойца, по собственным шагам.
Cпасибо www.djbook.ru, русский перевод онлайн книги о django, именно отсюда я черпал данные для написания поста.
Далее по тексту я попытаюсь кратко описать общие сведения необходимые для работы с БД в django.
Начну с перечисления приложений с которыми я работал:
- python 2.6
- django 1.1.1
- postgreSQL 8.4.2
- python-psycopg2 2.0.8-0
здесь ссылка на то как установить django
Поскольку это описание собственного опыта, буду описывать всё по шагам, как делал я.
Первым шаг. Создание проекта
Для начала, нужно создать новый проект. Для этого нужно определиться с именем каталога проекта и местом его расположения. В выбранном каталоге выполним команду:
django-admin.py startproject hellowDjango
Данное действие приведёт к созданию шаблона нового проекта под названием hellowDjango. Подробнее о том, что происходит при выполнении команды можно прочитать здесь. Проект создан и пора переходить к следующему шагу.
Второй шаг, Настройка БД
Django может работать с множеством БД, но в данном примере я использую postgresql.
Я предполагаю, что БД у вас уже установлена и настроена. Если нет, то вот ссылка, которая помогла мне настроить мою БД на Ubuntu. Открываем файл настроек, settings.py находящийся в каталоге проекта hellowDjango, находим там такие строчки и модифицируем их до:
DATABASE_ENGINE = ‘postgresql_psycopg2′ #’postgresql_psycopg2’, ‘postgresql’, ‘mysql’, ‘sqlite3’ or ‘oracle’.
DATABASE_NAME = myDBName # Or path to database file if using sqlite3.
DATABASE_USER = myUserDB # Not used with sqlite3.
DATABASE_PASSWORD = myUserDBPasswor # Not used with sqlite3.
На всякий случай поясню:
- ‘postgresql_psycopg2’ — драйвер через который приложение будет выполнять запросы к БД и получать данные;
- myDBName — название БД;
- myUserDB — основной пользователь БД;
- myUserDBPasswor — пароль основного пользователя.
Теперь необходимо проверить, что всё настроено правильно, для этого нужно выполнить команду в каталоге проекта:
python manage.py shell
Данная команда запустит интерпретатор python с настройками проекта. В интерпретаторе проверим подключение к БД.
>>> from django.db import connection
>>> cursor = connection.cursor()
В случае ошибки в настройках, появится сообщение которое поможет внести нужные исправления.
Третий шаг, Создание приложения.
Приложение в django — набор модели БД и представления хранящиеся в одном пакете python. Для того что бы, создать приложение, необходимо находясь в каталоге проекта выполнить команду:
python manage.py startapp MyName
Эта команда создаст директорию MyName, в каталоге проекта hellowDjango, а так же создаст файлы «заготовки» приложения в каталоге MyName.
Четвёртый шаг, Описание модели.
Модель БД в django — описание таблиц на языке python. Для создания модели приложения необходимо отредактировать файл MyName/models.py. В модели описывается много классов, каждый из которых будет описывать одну таблицу БД, а свойство класса — это один столбец таблицы. Класс должен быть унаследован от models.Model описанного в пакете django.db.models. Свойства класса должны иметь типы описанные в пакете django.db.models. Все типы данных и их применение описаны здесь.
Я в своих целях использовал следующие типы данных:
- models.DateTimeField() — поле содержащее в себе Дату и Время
- models.CharField(max_length= xx) — Текстовое поле ограниченной длины. Длина строки = xx символов
- models.BooleanField() — Поле содержащие в себе булево значение
- models.ForeignKey() — ссылка на внешнюю таблицу
- models.PositiveIntegerField() — положительное целое значение
- models.URLField(max_length=хх) — ссылка на web страницу длина ссылки ограничена xx символами
- models.DateField() — поле содержащие Дату
При создании модели данных у меня возникла проблема с внешними ключами. При ссылке на внешнюю таблицу которая описывалась ниже происходила ошибка. Перестановка таблиц решила данную проблему. Отмечу, что при создании внешних ключей, django добавляет к имени поля с внешним ключом постфикс _id.
Для проверки корректности созданной модели необходимо выполнить команду:
python manage.py validate
После того как модель прошла проверку, можно посмотреть как django предложит сгенерировать таблицы. Для этого выполним ещё одну команду:
python manage.py sqlall MyName
Для создания модели в БД, выполним следующую команду:
python manage.py syncdb
Пятый шаг. Работа с БД в интерпретаторе.
Ниже представлены варианты вставки данных в БД
Запускаем интерпретатор
python manage.py shell
>>> import MyName.models as mo # импортируем все модели проекта
>>> type = mo.ProductClass() # создаём экземпляр класса Типы Продуктов
>>> type.class_name = ‘сырьё’ # название типа
>>> type.save() # записываем экземпляр в БД
>>> type
< ProductClass: ProductClass object>
# так же можно воспользоваться вставкой данных другого вида
>>> mo.Dealer(organization_name = «ООО Рога И Копыта»).save() # создаст запись в таблице Dealer
>>> mo.Dealer.objects.all() # выполняем выборку данных из таблицы Dealer
[< Dealer: ООО Рога И Копыта>] # поскольку запись в таблице только 1 то и коллекция содержит всего 1 элемент, обратиться к нему можно через индексы.
# если для создания записи будет не хватать каких либо данных вы уведите протокол ошибки. Например такой:
>>> mo.Product(name = ‘овёс’, price = 50, product_class = type).save()
Traceback (most recent call last):
.
IntegrityError: null value in column «diler_id» violates not-null constraint
>>> mo.Product(name = ‘овёс’, price = 50, product_class = type, diler = mo.Dealer.objects.all()[0]).save() # вторая запись в таблице Product
Теперь нужно поговорить о выборе данных из таблиц.
# полная выборка из таблицы
>>> mo.Product.objects.all()
[< Product: мука>, < Product: овёс>, < Product: рожь>]
# выборка по полю name
>>> mo.Product.objects.filter(name = ‘овёс’)
[< Product: овёс>]
# выборка по частичному совпадению
>>> mo.Product.objects.filter(name__contains = ‘о’)
[< Product: овёс>, < Product: рожь>]
Мы рассмотрели вставку и выборку данных.
Давайте рассмотрим варианты обновления записей.
# для того что бы провести обновление записи необходимо выполнить следующие действия
>>> item2 = mo.Product.objects.get(name = ‘овёс’)
>>> item2.name = «овёс золотистый»
>>> item2.save()
Данный пример прост но имеет свой недостаток, он выполняет обновление всех полей записи, а не только тех которые изменились. Данный факт может привести к «гонке» пользователей, когда происходит массовое изменение данных в Таблице. Для решения такой проблемы правильно будет использовать метод update. Данный метод изменяет только указанные поля.
>>> mo.Product.objects.filter(id=3).update(name=’oves’)
1
>>> cole[2]
< Product: oves>
Последнее, что хочется описать, это удаление записей из БД.
Существует два способа удаления записей:
Первый удаление всех данных из таблицы
>>> cm.Dealer.objects.all()
[< Dealer: ООО Рога И Копыта>]
>>> cm.Dealer.objects.all().delete()
>>> cm.Dealer.objects.all()
[]
Второй удаление отобранных записей
>>> cm.ProductClass.objects.all()[0].id
1
>>> cm.ProductClass.objects.filter(id=1).delete()
>>> cm.ProductClass.objects.all()
[]
Более подробно о всех командах api работы с БД и можно почитать здесь.
Вот краткое описание возможностей работы с БД в django, надеюсь данная информация будет полезна.
Немного более развёнутую статью можно прочитать у меня в блоге