Arbeit mit Datenbanken in Swift: PostgreSQL und MongoDB

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

Einführung: Datenbanken im Swift-Ökosystem



Swift hat sich längst über die reine mobile App-Entwicklung hinausentwickelt. Mit dem Aufkommen serverseitiger Frameworks wie Vapor und Perfect ist die Sprache zu einem vollwertigen Werkzeug für den Bau von Backends geworden. Allerdings hat die Arbeit mit Datenbanken in Swift ihre eigenen Besonderheiten. Anders als bei Python oder JavaScript gibt es hier keine integrierten Treiber – alles wird über Drittanbieter-Pakete abgewickelt.



In diesem Artikel erläutern wir, wie man eine Verbindung zu zwei gängigen DBMS herstellt: dem relationalen PostgreSQL und dem dokumentenorientierten MongoDB. Sie erfahren, welche Bibliotheken Sie verwenden, wie Sie die Verbindung konfigurieren und wie Sie grundlegende CRUD-Operationen durchführen. Die Beispiele sind auf iOS/macOS ausgerichtet, der Code funktioniert aber auch in einer Server-Umgebung.



PostgreSQL in Swift: Klassischer Ansatz mit Vapor und Fluent



Auswahl einer Bibliothek

Für die Arbeit mit PostgreSQL in Swift ist Fluent der De-facto-Standard – ein ORM aus dem Vapor-Framework. Fluent unterstützt PostgreSQL, MySQL, SQLite und MongoDB (über einen separaten Treiber). Falls Sie ohne Vapor arbeiten müssen, verwenden Sie PostgresClientKit – einen Low-Level-Treiber.



Verbindungseinrichtung

Fügen Sie die Abhängigkeit zu Package.swift hinzu:

.package(url: "https://github.com/vapor/fluent-postgres-driver.git", from: "2.0.0")


Grundlegende Konfiguration in configure.swift:

import Fluentimport FluentPostgresDriverimport Vapor

public func configure(_ app: Application) throws { app.databases.use(.postgres( hostname: "localhost", port: 5432, username: "swift_user", password: "secret", database: "swift_db" ), as: .psql) // Migrationen hinzufügen app.migrations.add(CreateUser())}


CRUD-Operationen am Beispiel des User-Modells

Erstellen wir ein Modell und eine Migration:

final class User: Model, Content {    static let schema = "users"        @ID(key: .id)    var id: UUID?        @Field(key: "name")    var name: String        @Field(key: "email")    var email: String        init() { }        init(id: UUID? = nil, name: String, email: String) {        self.id = id        self.name = name        self.email = email    }}

struct CreateUser: Migration { func prepare(on database: Database) -> EventLoopFuture<Void> { database.schema("users") .id() .field("name", .string, .required) .field("email", .string, .required) .create() } func revert(on database: Database) -> EventLoopFuture<Void> { database.schema("users").delete() }}


Beispielabfrage in einem Controller:

// Benutzer erstellenlet user = User(name: "Alexey", email: "alex@example.com")try await user.save(on: req.db)

// Alle Benutzer findenlet users = try await User.query(on: req.db).all()

// Nach E-Mail filternlet filtered = try await User.query(on: req.db) .filter(\\.$email == "alex@example.com") .first()


Wichtig: Fluent verwendet Asynchronie via EventLoopFuture oder async/await (ab Vapor 4.60+). Stellen Sie sicher, dass Ihre Umgebung Swift 5.5+ unterstützt.



MongoDB in Swift: Dokumentenflexibilität mit MongoKitten



Auswahl eines Treibers

Für MongoDB ist die Hauptbibliothek MongoKitten. Sie unterstützt alle modernen MongoDB-Versionen, inklusive Atlas (Cloud-Version). Eine Alternative ist MongoSwift von MongoDB Inc., aber MongoKitten gilt als "Swift-typischer" im Stil.



Verbindung zur Datenbank herstellen

Zu Package.swift hinzufügen:

.package(url: "https://github.com/OpenKitten/MongoKitten.git", from: "7.0.0")


Verbindungsbeispiel (für iOS/macOS):

                

Blogs

Buchempfehlungen