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 paraPlaylist; - CRUD de
ArtistaeMusica; - 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.
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 runNo 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 runO 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"Para executar as principais operações e consultas no terminal:
python demo.pymodels.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, comandoinit-dbe rotas de demonstração.demo.py: execução sequencial para apresentação.
Depois de iniciar o Flask, abra:
GET /consultas/playlists/PabloGET /consultas/musicas-playlists/Josue/QueenGET /consultas/contagem-playlistsGET /consultas/artistas-sem-playlistsGET /consultas/musica/1/com-artistaGET /consultas/tempo-total-playlistsGET /consultas/mais-curtas-que-mediaGET /consultas/playlist/Rock do Pablo/musicasGET /consultas/donos-por-musica/Bohemian RhapsodyGET /consultas/rank-artistasGET /consultas/led-maiores-queen
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}"