Пишем web на Python3, подключаем в приложение базу данных

newbie

Опубликован:  2019-02-22T07:48:16.016095Z
Отредактирован:  2019-02-25T13:09:56.910894Z

Продолжаем работу над проектом selfish. На текущий момент у приложения имеется стартовая страница, и совершенно отсутствует полезный функционал. Настало время научить selfish работать с данными на сервере, для этого понадобится back end и средство для хранения данных - база данных. В этом обзоре я покажу один из возможных вариантов подключения базы данных PostgreSQL к уже существующему web-приложению.

PostgreSQL - это система управления базами данных, построенная на основе языка запросов SQL. В совокупности пакет PostgreSQL содержит сервер баз данных и клиент для администрирования баз данных - psql. Для продолжения разработки selfish мне понадобятся обе составляющие, поэтому предварительно я подготовил своё рабочее место и обзавёлся виртуальным тестовым сервером, который и предоставит мне базу данных PostgreSQL. Единственное замечание, по ссылке представлено описание подготовки сервера на основе Debian stretch, а поскольку selfish теперь разрабатывается на Debian buster, сервер мне тоже пришлось переделать и установить на него Debian buster. Замечу, что отличий в процессе установки и настройки не выявлено.

Итак, мой PostgreSQL сервер доступен на IP-адресе 192.168.56.101, на сервере создан пользователь newbie, и у этого пользователя в наличие имеется база данных с именем startpoint. Открываю терминал своего десктопа и подключаюсь к этой базе данных.

psql -h 192.168.56.101 -U newbie -d startpoint

eOPY710wQD.png

Поскольку конфигурация selfish определяет три режима работы приложения, мне понадобится три базы данных, каждая из которых будет соответствовать определённому режиму работы приложения. Создаю эти базы данных прямо в интерактивной сессии psql.

CREATE DATABASE selfish;
CREATE DATABASE selfish_d;
CREATE DATABASE selfish_t;

2cJw5267zH.png

Имена созданных баз данных, а так же параметры подключения к серверу баз данных мне понадобятся чуть позже при конфигурации приложения, об этом поговорим далее...

Для взаимодействия с базой данных PostgreSQL в коде Python мне необходим адаптер psycopg2. Детально процесс установки psycopg2 описан в статье по ссылке. В терминале вхожу в базовый каталог selfish, активирую виртуальное окружение и устанавливаю адаптер базы данных.

cd ~/workspace/selfish/
source venv/bin/activate
pip install --no-binary :all: psycopg2

MyqHocqjbA.png

Поскольку данный пакет установлен нестандартным образом, это необходимо отразить в файле requirements.txt, который ещё много раз будет переписан, поэтому делаю следующее, сохраняю изменения в requirements.txt

pip freeze > requirements.txt

Затем создаю новый файл requirements-first.txt при помощи такой команды.

grep psycopg2 requirements.txt > requirements-first.txt

Теперь открываю файл requirements-first.txt в текстовом редакторе и дописываю в конец единственной строки следующее.

hSOeVNjlem.png

Сохраняю файл и покидаю текстовый редактор. Впоследствии оба файла requirements я буду использовать для восстановления виртуального окружения, когда это понадобится, а метка first подскажет последовательность их использования.

Для эффективного и простого взаимодействия с базой данных мне понадобятся ещё два сторонних пакета: Flask-SQLAlchemy и Flask-Migrate. Устанавливаю их одной командой.

pip install Flask-SQLAlchemy Flask-Migrate

7QW1L7UzNU.png

Теперь, когда у меня есть в наличие пустые базы данных и все необходимые для взаимодействия с ними в коде Python3 инструменты, мне осталось вписать необходимые изменения в конфигурацию selfish. Открываю проект в редакторе PyCharm. Первым в очередь на правку стоит файл config.py, дописываю в соответствующие классы этого файла соответствующие базы данных и параметры подключения к ним.

tVW461uC5F.png

На снимке экрана выше красными кружками отмечены новые строчки файла. В соответствующее свойство вписаны в определённой форме параметры подключения и имена баз данных. Кроме этого в класс Config вписана пара функциональных свойств для SQLAlchemy.

База данных в приложении selfish будет представлена в виде объекта. Этот объект нужно создать и сконфигурировать, для этого открываю в редакторе файл selfish/__init__.py и дописываю в него новый код.

QIl1Uyq7uh.png

В процессе разработки объектом базы данных очень удобно управлять посредством менеджера проекта, для этого нужно слегка модифицировать файл manage.py. Открываю его в редакторе и дописываю необходимое.

1jS53YBjgi.png

Как видно на снимке экрана, у менеджера проекта появилась новая команда, с её помощью инициирую менеджер базы данных прямо в терминале.

python manage.py db init

DH61qLCEiT.png

У новой команды менеджера есть краткая справка с перечнем доступных команд и их синтаксисом, её тоже можно увидеть в терминале.

python manage.py db --help

t551iK3DBy.png

Как пользоваться всем этим великолепием, я расскажу чуть позже, описывая процесс разработки selfish, а пока стоит подвести промежуточный итог. У selfish появилась база данных, она на текущий момент пустая, а web-приложение пока не содержит полезного функционала для управления данными в ней, поэтому продемонстрировать работу с данными прямо сейчас не получится. Этому будет посвящен следующий выпуск блога. А пока нужно правильно сохранить изменения проекта в Git. Единственный из отредактированных файл - config.py - не входит в git-репозиторий, чтобы не потерять его код, копирую его в шаблон.

cp config.py config.template.py

После этого проект можно сохранить в Git. Текущее состояние кода проекта можно увидеть в моём профиле на gitlab.com. Вопросы, предложения, комментарии, критику и всё остальное можно оставлять прямо в комментариях ниже. О разработке проекта мы поговорим ещё на страницах этого блога, продолжение следует...

Комментарии: