Datenbankmigrationen in Node.js: Sequelize, Knex und TypeORM

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Datenbankmigrationen in JavaScript (Node.js): vollständiger Werkzeugüberblick



Datenbankmigrationen sind eine Möglichkeit zur kontrollierten und versionierten Änderung des Datenbankschemas. In der Node.js-Welt gibt es mehrere leistungsstarke Bibliotheken, die die Automatisierung dieses Prozesses ermöglichen. In diesem Artikel betrachten wir die drei beliebtesten Werkzeuge: Sequelize, Knex.js und TypeORM.



Was sind Migrationen und warum werden sie benötigt?

Migrationen lösen das Problem der Synchronisation der Datenbankstruktur zwischen Entwicklern und Umgebungen (dev, staging, production). Anstatt SQL-Skripte manuell auszuführen, beschreiben Sie die Änderungen im Code in JavaScript/TypeScript. Vorteile:

  • Automatische Anwendung von Änderungen
  • Möglichkeit des Rollbacks auf eine vorherige Version
  • Speicherung des Änderungsverlaufs im Repository
  • Unterstützung verschiedener DBMS (PostgreSQL, MySQL, SQLite u.a.)


1. Sequelize — ORM mit integriertem Migrationssystem

Sequelize ist einer der beliebtesten ORMs für Node.js. Es bietet ein CLI-Werkzeug zur Verwaltung von Migrationen. Installation:

npm install --save sequelizenpm install --save-dev sequelize-clinpx sequelize-cli init

Nach der Initialisierung werden die Ordner migrations, models, seeders und die Konfigurationsdatei config/config.json erstellt.



Erstellung einer Migration

npx sequelize-cli migration:generate --name create-users-table

Beispielinhalt einer Migration:

'use strict';module.exports = {  up: async (queryInterface, Sequelize) => {    await queryInterface.createTable('Users', {      id: {        type: Sequelize.INTEGER,        primaryKey: true,        autoIncrement: true      },      username: {        type: Sequelize.STRING,        allowNull: false,        unique: true      },      email: {        type: Sequelize.STRING,        allowNull: false      },      createdAt: {        type: Sequelize.DATE,        allowNull: false      },      updatedAt: {        type: Sequelize.DATE,        allowNull: false      }    });  },  down: async (queryInterface, Sequelize) => {    await queryInterface.dropTable('Users');  }};


Anwendung und Rückgängigmachen

npx sequelize-cli db:migratenpx sequelize-cli db:migrate:undo


2. Knex.js — SQL Query Builder mit Migrationen

Knex.js ist kein ORM, sondern ein leistungsstarker Query Builder. Sein Migrationssystem gilt als eines der flexibelsten. Installation:

npm install knex --savenpm install pg --save  # oder mysql, sqlite3npx knex init


Erstellung und Schreiben einer Migration

npx knex migrate:make create_posts_table

Beispielcode:

exports.up = function(knex) {  return knex.schema.createTable('posts', (table) => {    table.increments('id').primary();    table.string('title', 255).notNullable();    table.text('content');    table.integer('user_id').unsigned().references('id').inTable('users');    table.timestamps(true, true);  });};

exports.down = function(knex) { return knex.schema.dropTableIfExists('posts');};


Befehle für die Arbeit

npx knex migrate:latestnpx knex migrate:rollbacknpx knex migrate:status  # Status anzeigen

Knex unterstützt auch "Seeds" für die initiale Datenbefüllung:

npx knex seed:make 01_demo_usersnpx knex seed:run


3. TypeORM — Migrationen für TypeScript-Projekte

TypeORM ist ein moderner ORM, der sowohl JavaScript als auch TypeScript unterstützt. Sein Migrationssystem ist eng mit Entitäts-Dekorateuren integriert. Installation:

npm install typeorm reflect-metadata --savenpm in                    

Empfehlungen