Как использовать Fast API с реляционной базой данных на Ubuntu

Введение

FastAPI быстро приобрёл популярность как высокопроизводительный, легко используемый веб-фреймворк для создания API с Python. Когда он сочетается с relational database, FastAPI может использоваться для создания мощных, масштабируемых приложений. Этот指南 вам покажет, как установить FastAPI приложение с relational database на Ubuntu 24.04 машине. Мы покроем все, от установки необходимых инструментов до настройки базы данных и создания API конечных точек.

Использование FastAPI с PostgreSQL базой данных

Предупреждения

Перед выполнением шагов из этого руководства вам нужно:

  • Сервер с Ubuntu, неRoot пользователь с правами sudo и активной firewall. Чтобы получить инструкции по установке, выберите из этого списка вашу дистрибуцию и следуйте指南 настройки начального сервера. Убедитесь, что вы работаете с поддерживаемой версией Ubuntu.

  • Знание командной строки Linux. Для знакомства или повторения командной строки вы можете посетить это руководство по основам командной строки Linux.

  • Запустите sudo apt-get update в терминале Ubuntu, чтобы убедиться, что ваша система имеет последние версии и обновления безопасности для программного обеспечения, доступного из настроенных на вашей системе репозиториев.

Данные инструкции являются действительными для последних версий Ubuntu: Ubuntu 24.04, Ubuntu 22.04 и Ubuntu 20.04. Если вы используете версию Ubuntu <= 18.04, мы рекомендуем вам обновить вашу версию Ubuntu до более последней версии, так как Ubuntu больше не обеспечивает поддержку этих версий. Эта коллекция руководств поможет вам обновить вашу версию Ubuntu.

Шаг 1 – Настройка Python среды

В Ubuntu 24.04 Python 3 выставлен по умолчанию. Откройте терминал и выполните следующую команду, чтобы убедиться в установке Python 3:

python3 --version

Если Python 3 уже установлен на вашем компьютере, эта команда вернёт текущую версию установки Python 3. Если он не установлен, вы можете выполнить следующую команду и установить Python 3:

sudo apt install python3

次に、您需要在系统中安装pipdev包安装器。在终端中运行以下命令:

sudo apt install python3-pip python3-dev

В этом руководстве мы будем использовать PostgreSQL в качестве нашей реляционной базы данных. Чтобы взаимодействовать с базой данных PostgreSQL, вам нужно установить libpq-dev с помощью следующего запроса:

sudo apt install libpq-dev

Шаг 2 – Создание и активация виртуального окружения

Если вы используете версию Ubuntu < 24.04, вам не требуется создавать виртуальное окружение. Вы можете перейти к следующему шагу.

Следующим шагом является создание виртуального окружения в вашем установленном Ubuntu, чтобы изолировать Python-пакеты от системного окружения. Чтобы это сделать, перейдите в ваш рабочий каталог и выполните следующий набор команд:

python3 -m venv fastapi-env

Эта команда создаст новый каталог с именем fastapi-env, в котором будет собственный набор Python-пакетов, изолированных от других проектов.

Чтобы убедиться, что все пакеты, которые вы будете устанавливать с этого момента, будут установлены в этом изолированном окружении, вам нужно активировать его, выполнив:

source fastapi-env/bin/activate

После выполнения вы увидите, что префикс терминального лога будет идти с именем вашего виртуального окружения, например:

Output
(fastapi-env) ubuntu@user:

Шаг 3 – Установка и настройка PostgreSQL

Следующий шаг – установка PostgreSQL (или любой другой связанной базы данных, которую вы выбрали).

sudo apt install postgresql postgresql-contrib

Теперь пришло время запустить и активировать службу PostgreSQL в вашей виртуальной среде.

sudo systemctl start postgresql
sudo systemctl enable postgresql

Вы можете проверить статус службы PostgreSQL, выполнив sudo systemctl status postgresql. После активирования службы, она автоматически запускается при загрузке системы.

Чтобы установить и использовать PostgreSQL с FastAPI, вам нужно установить несколько вещей:

  1. asyncpg: Это асинхронный драйвер PostgreSQL, который позволяет FastAPI взаимодействовать с базой данных PostgreSQL.
  2. SQLAlchemy: Это инструмент ORM, который помогает вам управлять схемами базы данных и запросами, написанными как Python-код, а не raw SQL.
  3. databases: Это библиотека баз данных для асинхронных операций, требуемых SQLAlchemy для работы асинхронно с FastAPI.

Чтобы установить эти, выполните следующий объединенныйCOMMAND:

pip install asyncpg sqlalchemy databases

Далее создайте базу данных Postgres с пользователем с необходимыми привилегиями.

sudo -u postgres psql
CREATE DATABASE <user_db>;
CREATE ROLE <username> WITH PASSWORD '<password>';
GRANT ALL PRIVILEGES ON DATABASE <user_db> TO <username>;
exit

Шаг 4 – Создание примера Python-приложения

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

Создайте новый Python-файл с именем postgres_db.py в вашем проекте.

nano postgres_db.py

В текстовом редакторе вы напишете логику для создания соединения с базой данных и создания таблицы внутри базы. В этом примере мы создаем соединение с PostgreSQL-базой данных с использованием пакета databases и определяем структуру таблицы books с использованием SQLAlchemy.

from databases import Database
from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, Float

DB_URL = "postgresql://username:password@localhost/user_db"

database = Database(DB_URL)
metadata = MetaData()

books = Table (
  "books",
  metadata,
  Column("id", Integer, primary_key=True, index=True),
  Column("title", String, index=True),
  Column("author", String, index=True),
  Column("price", Float),
)

engine = create_engine(DB_URL)
metadata.create_all(engine)

Сохраните и закройте файл.

Далее создайте main.py в том же каталоге.

nano main.py

В этом файле напишите основную логику вашего приложения:

from fastapi import FastAPI
from typing import List
from pydantic import BaseModel
from postgres_db import books, database

app = FastAPI()

class BookCreate(BaseModel):
    title: str
    author: str
    price: float

class BookResponse(BaseModel):
    id: int
    title: str
    author: str
    price: float

class Config:
  orm_mode=True

@app.on_event("startup")
async def startup():
    await database.connect()

@app.on_event("shutdown")
async def shutdown():
    await database.disconnect()

@app.post("/books/", response_model=BookResponse)
async def create_book(book: BookCreate):
    query = books.insert().values(title=book.title, author=book.author, price=book.price)
    last_book_id = await database.execute(query)

    query = books.select().where(books.c.id == last_book_id)
    inserted_book = await database.fetch_one(query)
    return inserted_book

@app.get("/books/", response_model=List[BookResponse])
async def get_books():
    query = books.select()
    return await database.fetch_all(query)

Этот код использует FastAPI для записи новых записей книг в PostgreSQL-базу данных и для извлечения коллекции книг из нее.

Шаг 5 – Установите необходимые библиотеки

В вашем Python-приложении вы используете различные библиотеки и пакеты. перед запуском приложения убедитесь, что вы установили необходимые библиотеки.

pip install fastapi uvicorn psycopg2

Шаг 6 – Запустите Python-приложение

Теперь пришло время запустить приложение, которое вы создали.

uvicorn main:app --reload

uvicorn является асинхронным серверным API-интерфейсом (ASGI), используемым для обслуживания приложения FastAPI. Использование uvicorn является предпочитаемым способом запуска приложения FastAPI, поскольку FastAPI сам является асинхронным веб-фреймворком.

Если вышеуказанный приказ выполняется без встречи с ошибкой, то вы увидите выходные данные, схожие следующим образом:

Output
INFO: Will watch for changes in these directories: ['/path/to/your/project'] INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) INFO: Started reloader process [XXXX] using StatReload INFO: Started server process [YYYY] INFO: Waiting for application startup. INFO: Application startup complete.

В веб-браузере перейдите к http://127.0.0.1:8000, чтобы увидеть выходные данные запроса.

Шаг 7 [OPTIONAL] – Тестирование Endpoints

Вы можете тестировать endpoint из вашего main.py (т.е. POST и GET), отправляя HTTP-запросы на сервер, который запущен на http://127.0.0.1:8000.

{
  "title": "The Great Gatsby",
  "author": "F. Scott Fitzgerald",
  "price": 10.99
}

Также вы можете выполнить GET-запрос к тому же серверу, чтобы получить список книг, находящихся в вашей Postgres-базе данных.

Заключение

В этом руководстве вы прошли процесс установки простой FastAPI-приложения, взаимодействующего с PostgreSQL-базой данных. Эти шаги также полезны для AI-приложений, особенно когда вам нужно создать веб-API для взаимодействия с вашими AI-моделями или управления данными, связанными с вашими AI-процессами. С этим фундаментом вы можете теперь строить и расширять ваши FastAPI-проекты.

Оставайтесь с нами для более полных статей о том, как работать с FastAPI.

Source:
https://www.digitalocean.com/community/tutorials/use-fastapi-with-relationaldb-ubuntu