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èleattributes— objet définissant les champsoptions— paramètres du modèle (tableName, timestamps, indexes, etc.)
Exemple :
const Product = sequelize.define('Product', {
title: {
type: DataTypes.ST