Skip to content

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

Repository files navigation

Atividade ORM - Python / Flask / SQLAlchemy

Implementação do esquema SQL da atividade usando Flask + SQLAlchemy, cobrindo:

  • entidades fortes: Artista, Usuario, Musica;
  • entidade fraca: Playlist, com chave primária composta por (playlist_id, usuario_id);
  • relacionamento N:N explícito: MusicaPlaylist, com chave estrangeira composta para Playlist;
  • CRUD de Artista e Musica;
  • criação de playlist, adição/remoção de músicas e transferência transacional;
  • consultas avançadas com joins, agregações, eager loading, subconsultas e ranking.

Como Rodar

Crie e ative um ambiente virtual, instale as dependências e inicialize o banco.

No Git Bash:

rm -rf .venv
python -m venv .venv
source .venv/Scripts/activate
python -m pip install --upgrade pip
pip install -r requirements.txt
flask --app app init-db
flask --app app run

No PowerShell:

Remove-Item -Recurse -Force .venv -ErrorAction SilentlyContinue
python -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
pip install -r requirements.txt
flask --app app init-db
flask --app app run

O banco padrão é SQLite em instance/atividade_orm.db. Para usar outro banco, defina a variável FLASK_SQLALCHEMY_DATABASE_URI antes de rodar os comandos.

Exemplo MySQL:

$env:FLASK_SQLALCHEMY_DATABASE_URI="mysql+pymysql://usuario:senha@localhost:3306/atividade_orm"

Demonstração Rápida

Para executar as principais operações e consultas no terminal:

python demo.py

Arquivos Principais

  • models.py: modelos ORM, restrições, chaves primárias, chaves estrangeiras e relacionamentos.
  • services.py: CRUD, gerenciamento N:N, transação e consultas complexas.
  • seed.py: dados fornecidos no enunciado.
  • app.py: aplicação Flask, comando init-db e rotas de demonstração.
  • demo.py: execução sequencial para apresentação.

Rotas de Consulta

Depois de iniciar o Flask, abra:

  • GET /consultas/playlists/Pablo
  • GET /consultas/musicas-playlists/Josue/Queen
  • GET /consultas/contagem-playlists
  • GET /consultas/artistas-sem-playlists
  • GET /consultas/musica/1/com-artista
  • GET /consultas/tempo-total-playlists
  • GET /consultas/mais-curtas-que-media
  • GET /consultas/playlist/Rock do Pablo/musicas
  • GET /consultas/donos-por-musica/Bohemian Rhapsody
  • GET /consultas/rank-artistas
  • GET /consultas/led-maiores-queen

Exemplos de CRUD

Criar artista:

curl -X POST http://127.0.0.1:5000/artistas `
  -H "Content-Type: application/json" `
  -d "{\"nome\":\"Nirvana\",\"nacionalidade\":\"Americana\"}"

Criar música:

curl -X POST http://127.0.0.1:5000/musicas `
  -H "Content-Type: application/json" `
  -d "{\"titulo\":\"Come As You Are\",\"duracao_segundos\":219,\"artista_id\":5}"

Criar playlist para Alexandre:

curl -X POST http://127.0.0.1:5000/usuarios/3/playlists `
  -H "Content-Type: application/json" `
  -d "{\"nome\":\"Clássicos do Alexandre\"}"

Adicionar música a uma playlist:

curl -X POST http://127.0.0.1:5000/playlists/1/1/musicas/2 `
  -H "Content-Type: application/json" `
  -d "{\"ordem_na_playlist\":4}"

Transferir música entre playlists do mesmo usuário:

curl -X POST http://127.0.0.1:5000/playlists/transferir-musica `
  -H "Content-Type: application/json" `
  -d "{\"musica_id\":3,\"usuario_id\":1,\"playlist_origem_id\":1,\"playlist_destino_id\":3,\"ordem_destino\":3}"

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages