Aula 05: Integrando Banco de Dados (SQLAlchemy) ao FastAPI no Curso de FastAPI

Posted by


Neste tutorial, vamos aprender como integrar um banco de dados utilizando SQLAlchemy ao nosso projeto FastAPI. O SQLAlchemy é uma biblioteca popular em Python, usada para interagir com bancos de dados relacionais de forma eficiente e fácil.

Antes de começarmos, certifique-se de ter o FastAPI e o SQLAlchemy instalados. Você pode instalar o FastAPI utilizando o pip:

pip install fastapi

E o SQLAlchemy:

pip install sqlalchemy

Também será necessário instalar o driver do banco de dados que você irá utilizar. Por exemplo, se você estiver utilizando o MySQL:

pip install pymysql

Com tudo configurado, vamos criar um novo arquivo chamado main.py e começar a integrar o banco de dados ao nosso projeto:

from fastapi import FastAPI
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

# Criando uma instância do FastAPI
app = FastAPI()

# Configuração do banco de dados
SQLALCHEMY_DATABASE_URL = "sqlite:///./test.db"

# Criando uma conexão com o banco de dados
engine = create_engine(SQLALCHEMY_DATABASE_URL)

# Criando uma sessão do SQLAlchemy
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

# Criando uma classe base para nossos modelos
Base = declarative_base()

# Rota para testar a conexão com o banco de dados
@app.get("/")
async def test_db_connection():
    # Testando a conexão com o banco de dados
    try:
        db = SessionLocal()
        db.execute("SELECT 1")
        return {"message": "Conexão com o banco de dados bem-sucedida"}
    except Exception as e:
        return {"message": "Erro ao conectar ao banco de dados"}

Neste código, criamos uma instância do FastAPI, configuramos a URL do banco de dados (no caso, estamos utilizando um banco de dados SQLite) e criamos uma classe base para nossos modelos. Também criamos uma rota de teste para verificar a conexão com o banco de dados.

Agora vamos criar alguns modelos e definir a estrutura do banco de dados. Vamos adicionar estas linhas ao nosso arquivo main.py:

from sqlalchemy import Column, Integer, String

# Definindo um modelo de usuário
class User(Base):
    __tablename__ = "users"

    id = Column(Integer, primary_key=True, index=True)
    name = Column(String, unique=True)
    age = Column(Integer)

# Criando as tabelas no banco de dados
Base.metadata.create_all(bind=engine)

Neste código, definimos um modelo de usuário com três colunas: id, name e age. Em seguida, criamos as tabelas no banco de dados utilizando o método create_all da classe Base.

Agora, vamos adicionar rotas para criar, ler, atualizar e excluir usuários do banco de dados. Adicione o seguinte código ao seu arquivo main.py:

from fastapi import Depends

# Rota para criar um novo usuário
@app.post("/users/")
async def create_user(user: User):
    db = SessionLocal()
    db.add(user)
    db.commit()
    db.refresh(user)
    return user

# Rota para consultar um usuário pelo ID
@app.get("/users/{user_id}")
async def read_user(user_id: int):
    db = SessionLocal()
    user = db.query(User).filter(User.id == user_id).first()
    return user

# Rota para atualizar um usuário pelo ID
@app.put("/users/{user_id}")
async def update_user(user_id: int, user: User):
    db = SessionLocal()
    user_in_db = db.query(User).filter(User.id == user_id).first()
    user_in_db.name = user.name
    user_in_db.age = user.age
    db.commit()
    db.refresh(user_in_db)
    return user_in_db

# Rota para excluir um usuário pelo ID
@app.delete("/users/{user_id}")
async def delete_user(user_id: int):
    db = SessionLocal()
    user = db.query(User).filter(User.id == user_id).first()
    db.delete(user)
    db.commit()
    return {"message": "Usuário excluído com sucesso"}

Neste código, criamos rotas para criar, consultar, atualizar e excluir usuários do banco de dados. Para cada operação, criamos uma instância da sessão do SQLAlchemy, realizamos a operação desejada e comitamos as mudanças no banco de dados.

Com todos os passos concluídos, basta executar o seu projeto FastAPI utilizando o comando:

uvicorn main:app --reload

Agora você tem um projeto FastAPI integrado com o SQLAlchemy, permitindo interagir com um banco de dados de forma fácil e eficiente. Você pode adaptar este exemplo para adicionar mais modelos e operações ao seu projeto, conforme necessário. Espero que este tutorial seja útil e esclarecedor.

0 0 votes
Article Rating
6 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
@Claytonbbs
2 months ago

Curso top, obrigado pela dedicação 🎉

@matheusmota9500
2 months ago

Sensacional a didática. Muito bem preparado o curso, a gente consegue entender os porquês das coisas serem assim, então é algo evolutivo que vai progredindo, dando assim um entendimento completo. Eu faço o curso sorrindo

@MicheleWM5
2 months ago

Nossa sensacional sempre suas aulas gostei muito e aprendi muito.🤩

@fravibis
2 months ago

Valeu!

@juninhovit
2 months ago

O curso esta sendo muito bom gostei muito, na minha visão se deixa-se a parte de testes pro final (em separado) ficaria mas fácil o entendimento as vezes deixa confuso e mistura a parte de teste com o desenvolvimento da api e poderia sobrar mas tempo pra explicar melhor cada passo o Session mesmo e algo interessante como ela funciona a integração com o select fiquei com uma sensação que falta algo pra entender nesta integração

@Ed_dev18
2 months ago

Qual é a live que você faz middlewares com fastAPI? Estou acompanhando o curso e anotando as outras lives para assistir em um tempo mais vago. Estou gostando muito!