Migrações de banco de dados em Node.js: Sequelize, Knex e TypeORM

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Migrações de banco de dados em JavaScript (Node.js): visão geral completa das ferramentas



Migrações de banco de dados são uma forma de alterar o esquema do banco de dados de maneira controlada e versionada. No mundo Node.js, existem várias bibliotecas poderosas que permitem automatizar esse processo. Neste artigo, veremos as três ferramentas mais populares: Sequelize, Knex.js e TypeORM.



O que são migrações e por que são necessárias?

As migrações resolvem o problema de sincronizar a estrutura do banco de dados entre desenvolvedores e ambientes (dev, staging, production). Em vez de executar scripts SQL manualmente, você descreve as alterações em código JavaScript/TypeScript. Vantagens:

  • Aplicação automática de alterações
  • Possibilidade de reversão (rollback) para a versão anterior
  • Armazenamento do histórico de alterações no repositório
  • Suporte a diferentes SGBDs (PostgreSQL, MySQL, SQLite e outros)


1. Sequelize — ORM com sistema de migrações integrado

Sequelize é um dos ORMs mais populares para Node.js. Ele fornece uma ferramenta CLI para gerenciar migrações. Instalação:

npm install --save sequelizenpm install --save-dev sequelize-clinpx sequelize-cli init

Após a inicialização, são criadas as pastas migrations, models, seeders e o arquivo de configuração config/config.json.



Criando uma migração

npx sequelize-cli migration:generate --name create-users-table

Exemplo de conteúdo da migração:

'use strict';module.exports = {  up: async (queryInterface, Sequelize) => {    await queryInterface.createTable('Users', {      id: {        type: Sequelize.INTEGER,        primaryKey: true,        autoIncrement: true      },      username: {        type: Sequelize.STRING,        allowNull: false,        unique: true      },      email: {        type: Sequelize.STRING,        allowNull: false      },      createdAt: {        type: Sequelize.DATE,        allowNull: false      },      updatedAt: {        type: Sequelize.DATE,        allowNull: false      }    });  },  down: async (queryInterface, Sequelize) => {    await queryInterface.dropTable('Users');  }};


Aplicação e reversão

npx sequelize-cli db:migratenpx sequelize-cli db:migrate:undo


2. Knex.js — Construtor de consultas SQL com migrações

Knex.js não é um ORM, mas um poderoso construtor de consultas. Seu sistema de migrações é considerado um dos mais flexíveis. Instalação:

npm install knex --savenpm install pg --save  # ou mysql, sqlite3npx knex init


Criando e escrevendo uma migração

npx knex migrate:make create_posts_table

Exemplo de código:

exports.up = function(knex) {  return knex.schema.createTable('posts', (table) => {    table.increments('id').primary();    table.string('title', 255).notNullable();    table.text('content');    table.integer('user_id').unsigned().references('id').inTable('users');    table.timestamps(true, true);  });};

exports.down = function(knex) { return knex.schema.dropTableIfExists('posts');};


Comandos para trabalhar

npx knex migrate:latestnpx knex migrate:rollbacknpx knex migrate:status  # visualizar status

Knex também suporta "sementes" (seeds) para preenchimento inicial de dados:

npx knex seed:make 01_demo_usersnpx knex seed:run


3. TypeORM — migrações para projetos TypeScript

TypeORM é um ORM moderno que suporta tanto JavaScript quanto TypeScript. Seu sistema de migrações é fortemente integrado com decoradores de entidades. Instalação:

npm install typeorm reflect-metadata --savenpm in                    

Recommendations