Migrations de bases de données en TypeScript : TypeORM, Prisma et Drizzle

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Migrations de bases de données en TypeScript : aperçu complet des outils et guide pratique

\n\n

Les migrations de bases de données sont un moyen de versionner et d'appliquer séquentiellement les modifications du schéma de base de données (création, modification ou suppression de tables, d'index et de contraintes). Dans l'écosystème TypeScript, il existe plusieurs outils puissants pour gérer les migrations. Dans cet article, nous allons détailler trois solutions les plus populaires : TypeORM, Prisma et Drizzle ORM.

\n\n

Pourquoi les migrations sont-elles nécessaires ?

\n

Sans migrations, les développeurs apportent souvent des modifications manuellement via la console SQL ou l'interface d'administration, ce qui entraîne :

\n
    \n
  • Une perte de synchronisation entre l'environnement de développement et la production ;
  • \n
  • Des erreurs dues au facteur humain ;
  • \n
  • Des difficultés lors de l'annulation des modifications.
  • \n
\n

Les migrations résolvent ces problèmes en permettant d'appliquer et d'annuler automatiquement les modifications, ainsi que de stocker l'historique de toutes les modifications du schéma dans le code.

\n\n

1. TypeORM — approche classique avec ActiveRecord et Data Mapper

\n

TypeORM est l'un des ORM les plus matures pour TypeScript et JavaScript. Il prend en charge à la fois le modèle ActiveRecord et Data Mapper, et dispose d'un système de migration intégré.

\n\n

Installation et configuration

\n
npm install typeorm reflect-metadata @types/node\nnpm install pg  # pour PostgreSQL
\n\n

Créez un fichier de configuration ormconfig.json ou utilisez data-source.ts :

\n
import { DataSource } from "typeorm";\n\nexport const AppDataSource = new DataSource({\n    type: "postgres",\n    host: "localhost",\n    port: 5432,\n    username: "user",\n    password: "password",\n    database: "mydb",\n    entities: ["src/entity/*.ts"],\n    migrations: ["src/migration/*.ts"],\n    synchronize: false,  // désactive la synchronisation automatique\n});
\n\n

Création et exécution d'une migration

\n

Générez d'abord une migration basée sur les modifications des entités :

\n
npx typeorm migration:generate src/migration/AddUserTable -d src/data-source.ts
\n\n

Exemple de migration générée :

\n
import { MigrationInterface, QueryRunner, Table } from "typeorm";\n\nexport class AddUserTable1234567890 implements MigrationInterface {\n    public async up(queryRunner: QueryRunner): Promise<void> {\n        await queryRunner.createTable(\n            new Table({\n                name: "user",\n                columns: [\n                    { name: "id", type: "int", isPrimary: true, isGenerated: true, generationStrategy: "increment" },\n                    { name: "name", type: "varchar", length: "255" },\n                    { name: "email", type: "varchar", isUnique: true },\n                ],\n            })\n        );\n    }\n\n    public async down(queryRunner: QueryRunner): Promise<void> {\n        await queryRunner.dropTable("user");\n    }\n}
\n\n

Appliquez la migration :

\n
npx typeorm migration:run -d src/data-source.ts
\n\n

Avantages et inconvénients de TypeORM

\n
    \n
  • Avantages : vaste écosystème, nombreuses bases de données (PostgreSQL, MySQL, SQLite, MSSQL), génération de migrations à partir des entités.
  • \n
  • Inconvénients : configuration complexe, lenteur avec un grand nombre d'entités, base de code obsolète.
  • \n
\n\n

2. Prisma — ORM moderne avec migrations automatiques

\n

Prisma est le nouveau standard des ORM TypeScript. Il utilise un schéma déclaratif (schema.prisma) et génère automatiquement les migrations.

\n\n

Installation et initialisation

\n
npm install prisma @prisma/client\nnpx prisma init
\n\n

Définissez le modèle dans prisma/schema.prisma :

\n
generator client {\n    provider = "prisma-client-js"\n}\n\ndatasource db {\n    provider = "postgresql"\n    url      = env("DATABASE_URL")\n}\n\nmodel User {\n    id                    

Recommendations