Рубрики
Без рубрики

Реализация SQLALCHEMY с Docker

Простое приложение с колбой, SQLalchemy и Docker HTTPS: //medium.com/medi … Теги с DockerComque, Python, Docker, SQLalchemy.

Простое приложение с колбой, sqlalchemy и docker

https://medium.com/media/8cf6a3d07b4aed423ee2e2ccd9d0682a/href

SQLalchemy – это объектно-реляционный Mapper (ORM), он позволяет нам взаимодействовать с базой данных с использованием функций Python и объекты. Например, если у нас есть таблица, называемая кошками, мы могли бы получить каждую строку с помощью команды, такими как Cats.query.all (). Основным преимуществом этого является то, что он позволяет нам абстрагировать SQL.

Docker 🐳 позволяет быстро поднять базу данных внутри контейнера Docker, это означает, что нам не нужно настроить и настроить базу данных на нашем локальном компьютере. Мы можем просто убить контейнер Docker, когда мы закончим с базой данных. В этой статье я покажу вам, как вы можете создать очень простой спокойную API, используя колбу и SQLALCHEMY, которая подключится к базе данных, работающей в контейнере докена.

Примечание: Сервер Flask будет работать на месте, а не в контейнере докера.

В этом примере я буду использовать Postgres, но его достаточно легко использовать любую другую реляционную базу данных, например mysql. Я также буду использовать Flask-SQLALCHEMY, которая представляет собой обертку вокруг SQLALCHEMY, упрощает наш код и означает, что мы можем использовать меньше кода котельной.

Предварительные условия

Где требования. Atxt:

flask==1.0.2
flask-sqlalchemy==2.3.0
psycopg2==2.7.6.1

init.py

в этом .py

Файл init имеет одну функцию create_app (), что достаточно насыщенно создает наше приложение Flask с этой линейной колбой (__ __). Затем он назначает URI из файла config.py к конфигурации приложения flask. Этот URI используется для подключения к базе данных Postgres.

Одной из важных вещей в этой функции является то, что мы должны использовать колбные контексты. Поскольку колба может иметь несколько приложений, мы должны указать, какое приложение мы используем с SQLalchemy, отсюда мы нажимаем контекст с нашим недавно созданным приложением. Иначе мы бы увидели следующую ошибку, Больше информации здесь Отказ

No application found. Either work inside a view function or push an application context.

После наставления нашего контекста мы связываем нашу БД к приложению Flask со следующей строкой db.init_app (flakh_app). Затем мы создаем все наши таблицы (в базе данных), если они еще не существуют, используя db.create_all (). Таблицы создаются с использованием классов, определенных в моделях .py.

config.py

config.py

На данный момент этот модуль на данный момент состоит в том, чтобы генерировать этот URI, но может быть легко расширен, чтобы добавить дополнительные переменные конфигурации, если это необходимо.

DATABASE\_CONNECTION\_URI = f'postgresql+psycopg2://{user}:{password}@{host}:{port}/{database}'

Примечание: F-струны, используемые для форматирования строк (как показано выше), могут быть использованы только с Python3.6.

база данных

Это примеры переменных, которые необходимо пропустить в качестве переменных среды к приложению Flask.

POSTGRES\_USER=test
POSTGRES\_PASSWORD=password
POSTGRES\_HOST=localhost
POSTGRES\_PORT=5432
POSTGRES\_DB=example

ЗАМЕТКА: Если вы запускаете приложение Flask в контейнере Docker, вам нужно будет изменить переменную, (от localhost), где postgres – это имя контейнера Docker, к которому мы подключаемым.

Предупреждение: Убедитесь, что это те же значения, переданные в приложение Flask и базу данных Postgres.

models.py

models.py

Этот модуль определяет наши классы, которые затем становятся таблицами в нашей базе данных. Например, классные кошки (CATS) – это имя таблицы, и каждый атрибут становится столбцом в этой таблице. Таким образом, таблица кошек с четырьмя колоннами ID, название, цена и породы.

Переменная БД импортируется от здесь файлом __init__.py, вот как функция db.create_all () знает, какие классы/таблицы для создания в базе данных.

app.py

app.py

Это простой файл Flask, который создает наше приложение, вызывая функцию create_app () из модуля __init__.py. Затем он определяет четыре функции для наших четырех маршрутов для API «RESTFLAY»:

  • Получить: получить информацию обо всех кошках
  • Post: Добавить новый кот
  • УДАЛИТЬ: Удалить кот
  • ПЛАСТЫРЬ: Редактировать цену кота

database.py

database.py

Этот модуль создан, поэтому мы можем абстрагироваться, как мы взаимодействуем с базой данных. Мы просто используем функции в этом модуле для взаимодействия с базой данных. Это означает, что легче изменить библиотеку, которую мы используем для взаимодействия с базой данных. Это также означает, что если по какой-то причине нам нужно изменить, как мы взаимодействуем с базой данных. Нам нужно только изменить его в один модуль (этот).

Модуль App.py вызывает функции в этом файле для взаимодействия с базой данных.

  • Получить – get_all ()
  • Post – add_instance ()
  • Удалить – Delete_Instance ()
  • Поставить – edit_instance ()

Некоторые функции используют это специальное слово называется ** kwargs, kwargs (ключевые аргументы) можно назвать все Но лучшая практика называть это кварг. Это позволяет вызыванию функции проходить в произвольном количестве аргументов ключевых слов.

Давайте посмотрим на функцию Add_Instance () в качестве примера. Функция называется в app.py, как такая база данных.add_Instance (Cats ,,,) то и kwargs – остальные аргументы, которые передаются на модель CATS, чтобы мы могли добавить наш объект Cat в базу данных.

ЗАМЕТКА: Kwargs просто хранит аргументы в качестве словаря, ** оператор распаковывает наш словарь и передает их в качестве аргументов ключевых слов.

Docker-Compose.yml.yml.yml

Docker-Compose.yml.yml.yml

Для развития я люблю использовать docker-compose. В Docker Compose мы можем указать Docker Containers с помощью YAML. Он может помочь упростить команды, которые нам нужно ввести при попытке создавать/запустить несколько контейнеров Docker. В этом примере мы определяем только один контейнер докера.

Посмотрите на файл:

Во-первых, мы определяем нашу версию номера версии: «3.5», рекомендуется Docker, который вы используете хотя бы версии 3. Вы можете найти Больше информации здесь Отказ

Затем мы даем наше имя обслуживания в этом случае базу данных. Мне нравится назвать свои услуги с тем, что они используются для общих имен, таких как веб-сервер, база данных или брокер сообщений. Это означает, что я могу изменить базовую технологию без изменения имени службы.

После этого мы называем наши контейнеры Postgres, это название контейнера Docker. Его можно использовать для взаимодействия с контейнером (чтобы убить его или работать на него) без использования идентификатора.

Мы используем официальные Postgres Image на Docker Hub. Мы вытягиваем изображение, которое помечено последним.

Это изображение требует, чтобы мы использовали некоторые переменные, чтобы настроить его, например, имя пользователя, пароль и базу данных. Мы передаем их в виде файла, чтобы сделать вещи немного проще (одинаковую database.conf как определено выше).

Затем мы отображаем Host Port 5432 к Gualf Docker Containter Port 5432, это порт, на котором прослушиваются Postgres. Вы можете изменить хост-порт, если вы хотите что-то еще, как 9000, скажем, это означает, что все трафик на хосте на порту 9000 будет отправлен на контейнер Postgres на порту 5432. Нам также нужно будет обновить переменную среды, используя приложение Flask.

Наконец, мы устанавливаем громкость, чтобы наши данные были настойчивы, без этого, когда контейнер Doction Docker убит, вы потеряете все ваши данные. Установив DB_Volume, даже если вы убиваете контейнер, вроде когда вы хотите обновить изображение Postgres, ваши данные будут сохраняться.

Запуск нашего приложения

Чтобы построить и запустить наш контейнер докера с помощью Docker-Compose:

docker-compose up --build -d

Эквивалентные команды, использующие просто обычный докер, будут

docker volume create --name db\_volume
docker run -d --name postgres -p 5432:5432 \
 --env-file docker/database.conf \
 -v db\_volume:/var/lib/postgresql postgres:latest

Чтобы начать наше приложение для колбы (должно быть в одной папке, что и приложение.

export FLASK\_APP=app.py
flask run

Вы можете отправлять HTTP-запросы на ваш сервер Flask на 127.0.0.1:5000, вы можете либо использовать клиент покоя, подобный почталью или бессоннице. Вы также можете использовать завиток на CLI.

curl -XPOST -H "Content-type: application/json" -d \
'{"name": "catty mcCatFace", "price": 5000, "breed": "bengal"}' \
'127.0.0.1:5000/add'

Приложение

Оригинал: “https://dev.to/ghost/implementing-sqlalchemy-with-docker-18c9”