Пишем 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
Поскольку конфигурация selfish определяет три режима работы приложения, мне понадобится три базы данных, каждая из которых будет соответствовать определённому режиму работы приложения. Создаю эти базы данных прямо в интерактивной сессии psql.
CREATE DATABASE selfish; CREATE DATABASE selfish_d; CREATE DATABASE selfish_t;
Имена созданных баз данных, а так же параметры подключения к серверу баз данных мне понадобятся чуть позже при конфигурации приложения, об этом поговорим далее...
Для взаимодействия с базой данных PostgreSQL в коде Python мне необходим адаптер psycopg2. Детально процесс установки psycopg2 описан в статье по ссылке. В терминале вхожу в базовый каталог selfish, активирую виртуальное окружение и устанавливаю адаптер базы данных.
cd ~/workspace/selfish/ source venv/bin/activate pip install --no-binary :all: psycopg2
Поскольку данный пакет установлен нестандартным образом, это необходимо отразить в файле requirements.txt, который ещё много раз будет переписан, поэтому делаю следующее, сохраняю изменения в requirements.txt
pip freeze > requirements.txt
Затем создаю новый файл requirements-first.txt при помощи такой команды.
grep psycopg2 requirements.txt > requirements-first.txt
Теперь открываю файл requirements-first.txt в текстовом редакторе и дописываю в конец единственной строки следующее.
Сохраняю файл и покидаю текстовый редактор. Впоследствии оба файла requirements я буду использовать для восстановления виртуального окружения, когда это понадобится, а метка first подскажет последовательность их использования.
Для эффективного и простого взаимодействия с базой данных мне понадобятся ещё два сторонних пакета: Flask-SQLAlchemy и Flask-Migrate. Устанавливаю их одной командой.
pip install Flask-SQLAlchemy Flask-Migrate
Теперь, когда у меня есть в наличие пустые базы данных и все необходимые для взаимодействия с ними в коде Python3 инструменты, мне осталось вписать необходимые изменения в конфигурацию selfish. Открываю проект в редакторе PyCharm. Первым в очередь на правку стоит файл config.py, дописываю в соответствующие классы этого файла соответствующие базы данных и параметры подключения к ним.
На снимке экрана выше красными кружками отмечены новые строчки файла. В соответствующее свойство вписаны в определённой форме параметры подключения и имена баз данных. Кроме этого в класс Config вписана пара функциональных свойств для SQLAlchemy.
База данных в приложении selfish будет представлена в виде объекта. Этот объект нужно создать и сконфигурировать, для этого открываю в редакторе файл selfish/__init__.py
и дописываю в него новый код.
В процессе разработки объектом базы данных очень удобно управлять посредством менеджера проекта, для этого нужно слегка модифицировать файл manage.py. Открываю его в редакторе и дописываю необходимое.
Как видно на снимке экрана, у менеджера проекта появилась новая команда, с её помощью инициирую менеджер базы данных прямо в терминале.
python manage.py db init
У новой команды менеджера есть краткая справка с перечнем доступных команд и их синтаксисом, её тоже можно увидеть в терминале.
python manage.py db --help
Как пользоваться всем этим великолепием, я расскажу чуть позже, описывая процесс разработки selfish, а пока стоит подвести промежуточный итог. У selfish появилась база данных, она на текущий момент пустая, а web-приложение пока не содержит полезного функционала для управления данными в ней, поэтому продемонстрировать работу с данными прямо сейчас не получится. Этому будет посвящен следующий выпуск блога. А пока нужно правильно сохранить изменения проекта в Git. Единственный из отредактированных файл - config.py - не входит в git-репозиторий, чтобы не потерять его код, копирую его в шаблон.
cp config.py config.template.py
После этого проект можно сохранить в Git. Текущее состояние кода проекта можно увидеть в моём профиле на gitlab.com. Вопросы, предложения, комментарии, критику и всё остальное можно оставлять прямо в комментариях ниже. О разработке проекта мы поговорим ещё на страницах этого блога, продолжение следует...
Метки: | linux, python3x, postgresql, web, selfish, flask, sqlalchemy, flask-migrate, psql |