Migrations de bases de données dans Node.js : Sequelize, Knex et TypeORM

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Migrations de bases de données en JavaScript (Node.js) : aperçu complet des outils



Les migrations de bases de données sont un moyen de modifier le schéma d'une base de données de manière contrôlée et versionnée. Dans le monde Node.js, il existe plusieurs bibliothèques puissantes qui permettent d'automatiser ce processus. Dans cet article, nous examinerons les trois outils les plus populaires : Sequelize, Knex.js et TypeORM.



Que sont les migrations et pourquoi en a-t-on besoin ?

Les migrations résolvent le problème de synchronisation de la structure de la base de données entre les développeurs et les environnements (dev, staging, production). Au lieu d'exécuter manuellement des scripts SQL, vous décrivez les modifications dans le code en JavaScript/TypeScript. Avantages :

  • Application automatique des modifications
  • Possibilité d'annulation (rollback) vers une version antérieure
  • Stockage de l'historique des modifications dans le dépôt
  • Prise en charge de différents SGBD (PostgreSQL, MySQL, SQLite, etc.)


1. Sequelize — ORM avec système de migration intégré

Sequelize est l'un des ORM les plus populaires pour Node.js. Il fournit un outil CLI pour gérer les migrations. Installation :

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

Après l'initialisation, les dossiers migrations, models, seeders et le fichier de configuration config/config.json sont créés.



Création d'une migration

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

Exemple de contenu d'une migration :

'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');  }};


Application et annulation

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


2. Knex.js — constructeur de requêtes SQL avec migrations

Knex.js n'est pas un ORM, mais un puissant constructeur de requêtes. Son système de migration est considéré comme l'un des plus flexibles. Installation :

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


Création et rédaction d'une migration

npx knex migrate:make create_posts_table

Exemple de code :

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');};


Commandes pour travailler

npx knex migrate:latestnpx knex migrate:rollbacknpx knex migrate:status  # affichage du statut

Knex prend également en charge les « seeds » pour le remplissage initial des données :

npx knex seed:make 01_demo_usersnpx knex seed:run


3. TypeORM — migrations pour projets TypeScript

TypeORM est un ORM moderne qui prend en charge à la fois JavaScript et TypeScript. Son système de migration est étroitement intégré aux décorateurs d'entités. Installation :

npm install typeorm reflect-metadata --savenpm in                    

Recommendations