Sequelize pour JavaScript (Node.js) : guide complet avec exemples

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

1. Qu'est-ce que Sequelize et pourquoi l'utiliser

Sequelize est une puissante bibliothèque ORM (Object-Relational Mapping) pour Node.js, qui prend en charge les bases de données relationnelles : PostgreSQL, MySQL, MariaDB, SQLite et Microsoft SQL Server. L'ORM permet aux développeurs d'interagir avec la base de données en utilisant une approche orientée objet plutôt que d'écrire des requêtes SQL brutes.

Les principaux avantages de l'utilisation de Sequelize :

  • Abstraction SQL — travaillez avec les tables via des objets et méthodes JavaScript
  • Sécurité — protection automatique contre les injections SQL
  • Migrations — gérez les modifications du schéma de la base de données
  • Relations — implémentez facilement les liens entre tables (1:1, 1:N, N:N)
  • Validation — mécanismes intégrés de vérification des données
  • Transactions — prise en charge des opérations atomiques

Sequelize est idéal pour créer des API REST, des applications web avec Express.js, des bots et tout projet nécessitant une gestion fiable des bases de données SQL.

2. Installation

L'installation de Sequelize et du pilote pour votre base de données se fait via npm :

// Paquet de base
npm install sequelize

// Pilote pour PostgreSQL
npm install pg pg-hstore

// Pilote pour MySQL
npm install mysql2

// Pilote pour SQLite
npm install sqlite3

// Pilote pour MSSQL
npm install tedious

Pour démarrer rapidement avec SQLite (aucun serveur requis) :

npm install sequelize sqlite3

3. Démarrage rapide avec un exemple de code

Créons une application simple pour gérer des utilisateurs :

// index.js
const { Sequelize, DataTypes, Model } = require('sequelize');

// 1. Connexion à la base de données (SQLite)
const sequelize = new Sequelize({
  dialect: 'sqlite',
  storage: './database.sqlite',
  logging: false // désactive les logs des requêtes SQL
});

// 2. Définition du modèle User
class User extends Model {}
User.init({
  id: {
    type: DataTypes.INTEGER,
    autoIncrement: true,
    primaryKey: true
  },
  name: {
    type: DataTypes.STRING,
    allowNull: false
  },
  email: {
    type: DataTypes.STRING,
    allowNull: false,
    unique: true,
    validate: {
      isEmail: true
    }
  },
  age: {
    type: DataTypes.INTEGER,
    validate: {
      min: 0,
      max: 150
    }
  }
}, {
  sequelize,
  modelName: 'User',
  timestamps: true // ajoute createdAt et updatedAt
});

// 3. Synchronisation avec la BDD et opérations de test
async function main() {
  await sequelize.sync({ force: true }); // recrée la table
  console.log('Table User créée');

  // Création d'un utilisateur
  const user = await User.create({
    name: 'Jean Dupont',
    email: 'jean@example.com',
    age: 30
  });
  console.log('Utilisateur créé :', user.toJSON());

  // Recherche de tous les utilisateurs
  const users = await User.findAll();
  console.log('Tous les utilisateurs :', JSON.stringify(users, null, 2));

  // Recherche par ID
  const foundUser = await User.findByPk(1);
  console.log('Utilisateur trouvé :', foundUser.name);

  // Mise à jour
  await User.update({ age: 31 }, { where: { id: 1 } });
  console.log('Âge mis à jour');

  // Suppression
  await User.destroy({ where: { id: 1 } });
  console.log('Utilisateur supprimé');
}

main().catch(console.error);

4. Méthodes et fonctions principales

4.1. Sequelize.define() / Model.init()

Description : Définit un modèle (table) avec ses champs et types.

Paramètres :

  • modelName — nom du modèle
  • attributes — objet définissant les champs
  • options — paramètres du modèle (tableName, timestamps, indexes, etc.)

Exemple :

const Product = sequelize.define('Product', {
  title: {
    type: DataTypes.ST                    

Recommendations