Существует множество способов хранения данных. Есть текстовые файлы, CSV (значения, разделенные запятыми), таблицы Excel и так далее. Все они имеют свои плюсы и минусы. Но в этом посте я расскажу об одной серверной базе данных: Postgres.

Я проведу вас через установку рабочей среды и приведу полный пример того, как можно перейти от объектов Python к базе данных.

Каковы потребности?

  • Библиотека, которая может преобразовывать объекты в структуру данных, понятную базам данных, называется ORM (Object Relational Mapper). Для этого воспользуемся python-библиотекой SQLAlchemy. Он делает больше, чем просто перевод объектов из Python в структуры данных баз данных, он абстрагирует многие низкоуровневые концепции, такие как соединение, запросы, и предлагает несколько способов взаимодействия с базами данных.

Эффективное использование SQLAlchemy приводит к более читаемому и простому в обслуживании коду. Недостатком, я думаю, является то, что его не рекомендуется использовать, когда мы хотим узнать о SQL. Несмотря на то, что он предлагает возможность работать с необработанными SQL-запросами.

  • База данных, в которой мы будем хранить наши данные для последующего облегчения доступа и запросов. Вместо того, чтобы устанавливать полноценный PostgreSQL, мы собираемся использовать его докеризованную версию. Docker делает установку программного обеспечения очень простой и избавляет от всех проблем, которые часто возникают при установке программного обеспечения. Все, что вам нужно, это установить его на свой компьютер. Для руководства по установке перейдите здесь. А для получения докера этот средний пост неплохо справляется.
  • API базы данных Python для связи с PostgreSQL. Со списком опций можно ознакомиться здесь. Для этого поста мы будем использовать psycopg2. SQLAlchemy нуждается в этом для правильной связи с базой данных Postgres.
  • [Необязательно] Виртуальный env, который будет содержать только необходимые пакеты и где мы будем выполнять всю работу по программированию.

Основные понятия SQLAlchemy ORM

  • В его основе лежат Двигатели. Как упоминалось на официальном сайте, это отправная точка для любого приложения SQLAlchemy. Он содержит все необходимое для взаимодействия с DBAPI (для тех, кто заинтересован, вы можете найти здесь полные операции для Python DBAPI), делая их доступными в любое время, когда это необходимо.
  • Другой ключевой концепцией SQLAlchemy ORM является Session. Это очень удобное техническое решение, которое делает сохранение данных достаточно простым, чтобы пользователю не приходилось вручную сообщать обо всех изменениях в созданных объектах. Все запросы обрабатываются через сеансы. Для этого необходимо постоянное соединение с базой данных, и всякий раз, когда вы хотите повлиять на изменения существующих данных или оценить запросы, достаточно отправить простое уведомление (через реализацию DBAPI commit или откат). Таким образом, он работает вместе с двигателем.
  • Последняя концепция, о которой я хотел бы поговорить, прежде чем перейти к практике, — таблица. Создание таблиц с помощью SQLAlchemy ORM так же просто, как создание классов. Единственное, что нужно сделать, это наследовать от базового класса, который уведомляет SQLAlchemy о том, что класс следует рассматривать как определение таблицы базы данных.

Полное прохождение примера

Пример проекта будет состоять из хранения некоторой информации о футболистах в базе данных Postgres с использованием ORM SQLAlchemy. Для этого я создал проект со следующей структурой:

  • базовый файл, в котором определены конфигурации: Engine, Session и базовый класс моделей.
  • файл модели, в котором мы определяем таблицу для игроков.
  • класс, содержащий полезные запросы для наших нужд.
  • файл генератора поддельного плеера с использованием очень полезной библиотеки: Faker.

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

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

Теперь мы можем определить все операции, которые мы хотим обрабатывать с помощью SQLAlchemy в базе данных (в настоящее время в таблице players'). Это класс, содержащий некоторые операции, которые мы можем выполнять.

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

Теперь очень легко проверить все это. Конечно, чтобы это работало, Postgres должен быть доступен.

Резюме

В этом блоге мы рассмотрели некоторые концепции ORM и погрузились в практическое занятие по использованию библиотеки python SQLAlchemy для взаимодействия с базой данных Postgres для управления моделью футболистов.

Мы увидели, насколько мощным является SQLAlchemy ORM и насколько чистым он делает код, избегая всех сложностей необработанных SQL-запросов.

Теперь, когда у нас есть некоторые данные в базе данных, следующим шагом будет построение потока данных вокруг них с помощью такого инструмента, как Apache Beam. Следите за следующей записью в блоге.

Я очень надеюсь, что вам понравилось, не стесняйтесь оставлять/отправлять комментарии.

Последнее примечание: полный код можно найти на моем Github здесь.

Впервые появился на здесь.