Prise en main de Sequelize avec PostgreSQL

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

Étiquettes: PostgreSQL Sequelize Node.js ORM JavaScript

Publié le 13 juillet à 07h38