Como usar Fast API com um banco de dados relacional em Ubuntu

Introdução

O FastAPI rapidamente ganhou popularidade como um framework web de alto desempenho e fácil de usar para construir APIs com Python. Quando associado a um banco de dados relacional, o FastAPI pode ser usado para criar aplicações poderosas e escaláveis. Este guia vai guiar você pelo processo de configuração de uma aplicação FastAPI com um banco de dados relacional em um computador Ubuntu 24.04. Vamos abordar tudo, desde a instalação das ferramentas necessárias até a configuração do banco de dados e a criação de pontos finais de API.

Usar FastAPI com o Banco de Dados PostgreSQL

Pré-requisitos

Antes de seguir as etapas deste tutorial, você precisa:

  • Um servidor rodando Ubuntu juntamente com um usuário não-root com privilégios de sudo e uma firewall ativa. Para orientações sobre como configurar isso, por favor escolha sua distribuição da lista e siga com nossa guia de configuração inicial do servidor. Certifique-se de trabalhar com uma versão suportada do Ubuntu.

  • Familiaridade com a linha de comando do Linux. Para uma introdução ou atualização sobre a linha de comando, você pode visitar esta guia sobre primer do Linux command line.

  • Execute sudo apt-get update no terminal do Ubuntu para certificar-se que o seu sistema tem as versões mais recentes e atualizações de segurança para o software disponível dos repositórios configurados no seu sistema.

Estas instruções são válidas para as versões mais recentes do Ubuntu: Ubuntu 24.04, Ubuntu 22.04 e Ubuntu 20.04. Se você estiver usando a versão de Ubuntu <= 18.04, recomendamos que você atualize para uma versão mais recente, já que o Ubuntu já não oferece suporte para essas versões. Esta coleção de guias o ajudará a atualizar a versão do Ubuntu.

Passo 1 – Configuração do Ambiente Python

O Ubuntu 24.04 vem com Python 3 por padrão. Abra o terminal e execute o seguinte comando para verificar a instalação do Python 3:

python3 --version

Se o Python 3 já estiver instalado no seu computador, este comando retornará a versão atual da instalação do Python 3. Caso contrário, você pode executar o seguinte comando e obter a instalação do Python 3:

sudo apt install python3

A seguir, você precisará instalar os gerenciadores de pacotes de instalação pip e dev no seu sistema. Execute o seguinte comando no terminal:

sudo apt install python3-pip python3-dev

Neste tutorial, vamos usar o PostgreSQL como nossa base de dados relacional. Para interagir com a base de dados PostgreSQL, você precisa instalar o libpq-dev usando o comando a seguir:

sudo apt install libpq-dev

Passo 2 – Criar e Ativar Ambiente Virtual

Se você estiver usando a versão do Ubuntu < 24.04, você não precisa criar um ambiente virtual. Você pode pular para o próximo passo.

O próximo passo é criar um ambiente virtual dentro da instalação do Ubuntu para isolar os pacotes Python do seu ambiente de sistema. Para fazer isso, vá para o diretório de trabalho e execute o seguinte conjunto de comandos:

python3 -m venv fastapi-env

Este comando criará um novo ambiente virtual em um diretório chamado fastapi-env. Ele terá seu próprio conjunto de pacotes Python dedicados, isolados de outros projetos.

Para garantir que os pacotes que você instala a partir de agora sejam instalados neste ambiente isolado, você precisa ativá-lo executando:

source fastapi-env/bin/activate

Após a execução, você notará que o prompt do terminal está prefixado com o nome do ambiente virtual, como este:

Output
(fastapi-env) ubuntu@user:

Passo 3 – Instalar e Configurar o PostgreSQL

A próxima etapa é instalar o PostgreSQL (ou sua escolha de banco de dados relacional).

sudo apt install postgresql postgresql-contrib

Agora, é hora de iniciar e habilitar o serviço do PostgreSQL dentro do seu ambiente virtual.

sudo systemctl start postgresql
sudo systemctl enable postgresql

Você pode verificar o status do serviço do PostgreSQL executando sudo systemctl status postgresql. Assim que o serviço for habilitado, ele é iniciado automaticamente na inicialização do sistema.

Para instalar e usar o PostgreSQL com FastAPI, você precisa instalar algumas coisas:

  1. asyncpg: Este é um driver assíncrono do PostgreSQL que permite que FastAPI interaja com um banco de dados PostgreSQL.
  2. SQLAlchemy: Este é uma ferramenta ORM que o ajuda a gerenciar esquemas de banco de dados e consultas em vez de escrever SQL nativo.
  3. databases: Esta é uma biblioteca de banco de dados para operações assíncronas necessárias por SQLAlchemy para funcionar assíncronamente com FastAPI.

Para instalá-los, execute o seguinte comando consolidado:

pip install asyncpg sqlalchemy databases

A próxima etapa é criar um banco de dados Postgres e um usuário com os privilégios necessários.

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

Passo 4 – Criar Aplicação Python de exemplo

Você precisa de uma aplicação Python executável que acesse sua base de dados através de FastAPI. Se você não tiver um aplicativo Python em execução, você pode criar um rapidamente seguindo essas etapas:

Crie um novo arquivo Python chamado postgres_db.py no diretório do projeto.

nano postgres_db.py

No editor de texto, você escreverá o código para criar a conexão com a base de dados e criar uma tabela dentro dela. Neste exemplo, criamos uma conexão com o banco de dados PostgreSQL usando o pacote databases e definimos a estrutura de uma tabela books usando 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)

Salve e feche o arquivo.

A seguir, crie um main.py no mesmo diretório.

nano main.py

Escreva o log principal de sua aplicação nesse arquivo:

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)

Este código usa FastAPI para gravar novos itens de livro na base de dados PostgreSQL e buscar a coleção de livros dela.

Passo 5 – Instalar as Bibliotecas Necessárias

Em sua aplicação Python, você está referenciando várias bibliotecas e pacotes. Antes de executar o aplicativo, certifique-se de instalar as bibliotecas necessárias.

pip install fastapi uvicorn psycopg2

Passo 6 – Executar Aplicação Python

Agora, é hora de executar a aplicação que você criou.

uvicorn main:app --reload

uvicorn é um Servidor de Gateway de Interface Assíncrona (ASGI) que é usado para servir aplicações FastAPI. Usar uvicorn é a maneira preferida de executar uma aplicação FastAPI, já que FastAPI é um framework web assíncrono em si.

Se o comando acima for executado sem encontrar nenhum erro, você verá um output semelhante ao seguinte:

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.

No navegador web, navegue até http://127.0.0.1:8000 para ver o output da consulta.

Passo 7 [OPCIONAL] – Testar as Pontas de Aplicação

Você pode testar as pontas de aplicação definidas em seu main.py (isto é, POST e GET) enviando pedidos HTTP para o servidor rodando em http://127.0.0.1:8000.

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

Similarmente, você pode fazer uma chamada GET para o mesmo servidor para recuperar a lista de livros presentes em seu banco de dados Postgres.

Conclusão

Neste tutorial, você passou pelo processo de configuração de uma simples aplicação FastAPI que interage com um banco de dados PostgreSQL. Estes passos são também benéficos para aplicações AI, especialmente quando você precisa construir uma API web para interagir com seus modelos AI ou gerenciar dados relacionados a seus processos AI. Com esta estrutura em place, você agora pode construir e expandir seus projetos FastAPI.

Fique ligado para mais artigos sobre como trabalhar com FastAPI.

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