1. Was ist Sequelize und warum wird es benötigt?
Sequelize ist eine leistungsstarke ORM-Bibliothek (Object-Relational Mapping) für Node.js, die relationale Datenbanken wie PostgreSQL, MySQL, MariaDB, SQLite und Microsoft SQL Server unterstützt. ORM ermöglicht es Entwicklern, mit der Datenbank zu interagieren, indem sie einen objektorientierten Ansatz verwenden, anstatt reine SQL-Abfragen zu schreiben.
Die wichtigsten Vorteile der Verwendung von Sequelize:
- SQL-Abstraktion — Arbeiten mit Tabellen über JavaScript-Objekte und Methoden
- Sicherheit — automatischer Schutz vor SQL-Injection
- Migrationen — Verwaltung von Schemaänderungen der Datenbank
- Beziehungen — einfache Implementierung von Tabellenverknüpfungen (1:1, 1:M, M:N)
- Validierung — integrierte Mechanismen zur Datenprüfung
- Transaktionen — Unterstützung für atomare Operationen
Sequelize ist ideal für die Erstellung von REST-APIs, Webanwendungen mit Express.js, Bots und alle Projekte, die eine zuverlässige Arbeit mit SQL-Datenbanken erfordern.
2. Installation
Die Installation von Sequelize und dem Treiber für Ihre Datenbank erfolgt über npm:
// Basis-Paket
npm install sequelize
// Treiber für PostgreSQL
npm install pg pg-hstore
// Treiber für MySQL
npm install mysql2
// Treiber für SQLite
npm install sqlite3
// Treiber für MSSQL
npm install tedious
Für einen schnellen Start mit SQLite (keine Serverinstallation erforderlich):
npm install sequelize sqlite3
3. Schnellstart mit Codebeispiel
Erstellen wir eine einfache Anwendung zur Benutzerverwaltung:
// index.js
const { Sequelize, DataTypes, Model } = require('sequelize');
// 1. Verbindung zur Datenbank (SQLite)
const sequelize = new Sequelize({
dialect: 'sqlite',
storage: './database.sqlite',
logging: false // SQL-Abfragen-Logging deaktivieren
});
// 2. Definition des User-Modells
class User extends Model {}
User.init({
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true
},
name: {
type: DataTypes.STRING,
allowNull: false
},
email: {
type: DataTypes.STRING,
allowNull: false,
unique: true,
validate: {
isEmail: true
}
},
age: {
type: DataTypes.INTEGER,
validate: {
min: 0,
max: 150
}
}
}, {
sequelize,
modelName: 'User',
timestamps: true // fügt createdAt und updatedAt hinzu
});
// 3. Synchronisation mit der DB und Testoperationen
async function main() {
await sequelize.sync({ force: true }); // erstellt die Tabelle neu
console.log('Tabelle User wurde erstellt');
// Benutzer erstellen
const user = await User.create({
name: 'Max Mustermann',
email: 'max@example.com',
age: 30
});
console.log('Benutzer erstellt:', user.toJSON());
// Alle Benutzer abrufen
const users = await User.findAll();
console.log('Alle Benutzer:', JSON.stringify(users, null, 2));
// Suche nach ID
const foundUser = await User.findByPk(1);
console.log('Gefundener Benutzer:', foundUser.name);
// Aktualisieren
await User.update({ age: 31 }, { where: { id: 1 } });
console.log('Alter aktualisiert');
// Löschen
await User.destroy({ where: { id: 1 } });
console.log('Benutzer gelöscht');
}
main().catch(console.error);
4. Wichtige Methoden und Funktionen
4.1. Sequelize.define() / Model.init()
Beschreibung: Definition eines Modells (Tabelle) mit Angabe der Felder und deren Typen.
Parameter:
modelName— Name des Modellsattributes— Objekt mit Felddefinitionenoptions— Modelleinstellungen (tableName, timestamps, indexes usw.)
Beispiel:
const Product = sequelize.define('Product', {
title: {
type: DataTypes.ST Auch in der Bibliothek
Aufgabenwarteschlangen für JavaScript (Node.js): Bull, Bee-Queue, Kue
Playwright JavaScript (Node.js): Komplettes Tutorial mit Beispielen
Aufgabenwarteschlangen für PHP: RabbitMQ, Gearman und Redis