Drizzle ORM pour TypeScript : Guide complet
1. Qu'est-ce que Drizzle ORM et pourquoi l'utiliser ?
Drizzle ORM est une bibliothèque ORM (Object-Relational Mapping) moderne, légère et type-safe pour TypeScript et JavaScript. Contrairement aux ORM lourds comme TypeORM ou Sequelize, Drizzle est conçue pour privilégier la performance, la prévisibilité et une intégration totale avec le système de types de TypeScript. Elle ne cherche pas à masquer le SQL, mais offre plutôt un moyen pratique et typé d'écrire des requêtes SQL, tout en gardant un contrôle total sur le code généré.
L'objectif principal de Drizzle est d'éviter au développeur d'écrire des chaînes SQL brutes et de typer manuellement les résultats des requêtes. Vous décrivez le schéma de votre base de données en code TypeScript, et Drizzle déduit automatiquement les types pour toutes les tables, relations et requêtes. Ainsi, les erreurs liées à des noms de colonnes incorrects, des types de données erronés ou des champs manquants sont détectées à la compilation, et non à l'exécution. La bibliothèque prend en charge PostgreSQL, MySQL, SQLite et d'autres bases de données populaires.
Drizzle est idéale pour les projets où la performance et le contrôle du SQL sont cruciaux, mais où l'on souhaite tout de même bénéficier des avantages d'un ORM : l'autocomplétion dans l'IDE, la vérification des types et la description déclarative du schéma. Elle est souvent utilisée avec Next.js, NestJS, Express et d'autres frameworks. Grâce à sa légèreté (environ 7KB gzippé) et à l'absence de magie, Drizzle est un excellent choix tant pour les petits projets que pour les applications d'entreprise de grande envergure.
2. Installation
L'installation de Drizzle ORM et de son outil CLI (Drizzle Kit) se fait via npm ou yarn. Le choix du driver dépend de la base de données utilisée.
# Pour PostgreSQL
npm install drizzle-orm pg
npm install -D drizzle-kit @types/pg
# Pour MySQL
npm install drizzle-orm mysql2
npm install -D drizzle-kit @types/node
# Pour SQLite
npm install drizzle-orm better-sqlite3
npm install -D drizzle-kit @types/better-sqlite3
Après l'installation, créez un fichier de configuration drizzle.config.ts pour Drizzle Kit :
import type { Config } from "drizzle-kit";
export default {
schema: "./src/db/schema.ts",
out: "./drizzle",
dialect: "postgresql", // ou "mysql", "sqlite"
dbCredentials: {
url: process.env.DATABASE_URL!,
},
} satisfies Config;
3. Démarrage rapide
Un exemple minimal fonctionnel pour PostgreSQL. Commencez par définir le schéma, puis créez la connexion et exécutez une requête.
// src/db/schema.ts
import { pgTable, serial, text, integer } from "drizzle-orm/pg-core";
export const users = pgTable("users", {
id: serial("id").primaryKey(),
name: text("name").notNull(),
age: integer("age"),
});
// src/index.ts
import { drizzle } from "drizzle-orm/node-postgres";
import { Pool } from "pg";
import { users } from "./db/schema";
import { eq } from "drizzle-orm";
const pool = new Pool({
connectionString: process.env.DATABASE_URL,
});
const db = drizzle(pool);
async function main() {
// Insertion de données
const newUser = await db.insert(users).values({
name: "Alice",
age: 30,
}).returning();
console.log("Utilisateur créé :", newUser);
// Sélection de données
const allUsers = await db.select().from(users);
console.log("Tous les utilisateurs :", allUsers);
// Sélection avec condition
const user = await db.select()
.from(users)
.where(eq(users.name, "Alice"));
console.log("Utilisateur trouvé :", user);
}
main().catch(console.error);
4. Méthodes et fonctions principales
Voici les méthodes clés de Drizzle ORM avec leurs signatures et des exemples.