Sequelize est une bibliothèque ORM (Object-Relational Mapping) pour Node.js qui facilite les interactions avec les bases de données relationnelels. Elle mappe les tables vers des objets JavaScript, permettant aux développeurs de manipuler les données de manière orientée objet sans écrire de SQL brut.
Configuration d'un projet
Créez un dossier et initialisez un projet Node.js. Ensuite, installez Sequelize et le pilote PostgreSQL.
mkdir projet-orm
cd projet-orm
npm init -y
npm install sequelize pg pg-hstore
Connexion à la base de données
Pour établir une connexion, instanciez Sequelize avec les paramètres de la base de données.
const { Sequelize } = require('sequelize');
const db = new Sequelize('nom_de_la_base', 'utilisateur', 'motdepasse', {
host: 'localhost',
dialect: 'postgres',
pool: {
max: 8,
min: 2,
acquire: 25000,
idle: 15000
}
});
Vérifiez la connexion avec une fonction asynchrone.
async function testerConnexion() {
try {
await db.authenticate();
console.log('Connexion établie avec succès.');
} catch (erreur) {
console.error('Impossible de se connecter :', erreur);
}
}
testerConnexion();
Définition des modèles
Utiliesz define pour créer des modèles liés aux tables de la base de données.
const Client = db.define('Client', {
prenom: {
type: Sequelize.STRING,
allowNull: false
},
nom: {
type: Sequelize.STRING,
defaultValue: 'Inconnu'
}
}, {
timestamps: true
});
Synchronisation des modèles
La synchronisation permet d'aligner les modèles avec la structure de la base de données.
async function synchroniser() {
await Client.sync({ force: true });
console.log('Table des clients recréée.');
}
synchroniser();
Création d'enregistrements
Ajoutez des instances de modèle avec la méthode create.
async function ajouterClient() {
const nouveauClient = await Client.create({ prenom: 'Marie' });
console.log('Client inséré :', nouveauClient.toJSON());
}
ajouterClient();
Interrogation des données
Récupération de tous les enregistrements
Utilisez findAll pour récupérer tous les enregistrements d'une table.
async function listerClients() {
const clients = await Client.findAll();
console.log('Liste des clients :', JSON.stringify(clients));
}
listerClients();
Filtrage avec WHERE
Appliquez des filtres à l'aide d'opérateurs comme Op.
const { Op } = require('sequelize');
Client.findAll({
where: {
prenom: {
[Op.startsWith]: 'Ma'
}
}
}).then(resultats => console.log('Résultats filtrés :', resultats));
Interrogation de tables existantes
Pour des tables déjà présentes, définissez un modèle correspondant sans créer de nouveaux champs.
const Livre = db.define('livres', {
titre: Sequelize.STRING,
auteur: Sequelize.STRING,
disponible: Sequelize.BOOLEAN
}, {
timestamps: false
});
Livre.findAll({
where: {
titre: {
[Op.iLike]: '%roman%'
}
}
}).then(donnees => console.log('Livres trouvés :', donnees));
Requêtes SQL brutes
Pour des opérations complexes, utilisez sequelize.query.
const { QueryTypes } = require('sequelize');
async function requetePersonnalisee() {
const resultats = await db.query('SELECT * FROM clients WHERE age > :ageLimite', {
replacements: { ageLimite: 30 },
type: QueryTypes.SELECT
});
console.log('Résultats de la requête :', resultats);
}
requetePersonnalisee();
Les paramètres de liaison avec $ offrent une alternative sécurisée.
await db.query(
'SELECT * FROM commandes WHERE statut = $statutCommande',
{
bind: { statutCommande: 'livré' },
type: QueryTypes.SELECT
}
);