Comment utiliser Sequelize pour interagir avec PostgreSQL

Lorsque vous travaillez avec des bases de données, vous pouvez choisir d'utiliser les primitives proposées par la base de données, ou utiliser une bibliothèque qui se construit par-dessus et abstrait les petits détails pour vous.

Sequelizeest l'une de ces bibliothèques, et c'est un wrapper Node.js très populaire pourPostgreSQL,MySQLet autres bases de données.

Dans cet article, je vais explorer comment utiliser Sequelize pour travailler avec une base de données PostgreSQL.

Installer et configurer Sequelize

Sous le capot, Sequelize utilise lepgbibliothèque pour se connecter à PostgreSQL, donc lorsque nous installons lesequelizepackage npm, nous devons également installerpg:

npm install pg sequelize

Astuce: n'oubliez pas de courir en premiernpm init -ysi le projet est tout nouveau et que vous n'avez paspackage.jsonfichier déjà.

Dans votre fichier Node.js, vous définissez d'abord les variables d'accès à la base de données:

const user = '<postgres user>'
const host = 'localhost'
const database = '<postgres db name>'
const password = '<postgres password>'
const port = '<postgres port>'

Importez ensuite 3 objets desequelize:

import { Sequelize, Model, DataTypes } from 'sequelize'

Ensuite, vous pouvez initialiser un nouveauSequelizeinstance d'objet utilisant cette syntaxe:

const sequelize = new Sequelize(database, user, password, {
  host,
  port,
  dialect: 'postgres',
  logging: false
})

Nous indiquons à Sequelize quel type de base de données se trouve dans ledialectproperty (comme mentionné, il peut gérer plus que juste Postgres).

Nous désactivons également la journalisation, car elle peut être très détaillée car elle enregistre toutes les requêtes SQL, ce que nous n'avons pas vraiment besoin de regarder (sauf si vous déboguez un problème).

Comment créer un modèle Sequelize

Pour chaque table que vous souhaitez manipuler à l'aide de Sequelize, vous créez unmaquette.

Voici un exemple, supposons que nous ayons undogstable à deux colonnes:nameetage.

Nous créons unDogclasse étendant leModelclasse de base:

import { Sequelize, Model, DataTypes } from 'sequelize'

const class Dog extends Model {}

Puis appelez leinit()méthode statique sur la classe décrivant les données qu'elle contient et les règles que nous voulons appliquer. Dans ce cas, nous désactivonsnull:

Dog.init({
  name: {
    type: DataTypes.STRING,
    allowNull: false
  },
  age: {
    type: DataTypes.INTEGER,
    allowNull: false
  }
}, {
  sequelize,
  modelName: 'dog',
  timestamps: false
})

Nous avons utiliséDataTypes.STRINGetDataTypes.INTEGER. LeDataTypesobject contient une référence à tous les types que nous pouvons utiliser, et ils correspondent à chaque type de base de données spécifique.Voir la documentation officiellepour plus de types que vous pouvez utiliser.

Comment obtenir des données de la base de données

Maintenant que nous avons un modèle, comment extraire des données d'une table?

Nous pouvons utiliser lefindAll()méthode:

Dog.findAll()

L'appel de cette méthode renverra une liste de toutes les lignes, et nous l'affecterons à une variable:

const results = await Dog.findAll()

Nous utilisonsawaitcarfindAll()retourne une promesse

Pour limiter les colonnes que nous récupérons, passez un objet avec leattributesdéployer:

Dog.findAll({
  attributes: ['age']
})

Ajouter unWHEREà la requête à l'aide de lawherebiens. Par exemple, obtenez tous les chiens âgés de 8 ans:

Dog.findAll({
  where: {
    age: 8,
  }
})

Ou obtenez tous les chiens âgés de plus de 5 ans:

Dog.findAll({
  where: {
    age: {
      [Op.gte]: 5,
    }
  }
})

Plus de propriétés vous permettent d'effectuer d'autres opérations commelimitetorder:

Dog.findAll({
  limit: 10,
  order: [
    ['name', 'DESC']
  ]
})

Comment insérer des données dans la base de données

On peut appelerDog.create()en passant un objet pour créer une nouvelle ligne dans la base de données:

const name = 'Roger'
const age = 8
const result = await Dog.create({ name, age })

Comment mettre à jour les données

Utilisez leupdate()méthode pour mettre à jour les valeurs dans le tableau.

Dans cet exemple, j'ai défini l'âge de «Roger» à 9:

Post.update({
  age: 9
}, {
  where: {
    name: 'Roger'
  }
})

Suppression duwhereproperty mettra à jour toutes les lignes:

Post.update({
  age: 10
})

Téléchargez mon gratuitManuel de Node.js


Plus de didacticiels sur les nœuds: