Travailler avec les bases de données en Swift : PostgreSQL et MongoDB

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

Introduction : Les bases de données dans l'écosystème Swift



Swift a depuis longtemps dépassé le simple développement d'applications mobiles. Avec l'émergence de frameworks côté serveur tels que Vapor et Perfect, le langage est devenu un outil à part entière pour construire des backends. Cependant, travailler avec des bases de données en Swift a ses spécificités. Contrairement à Python ou JavaScript, il n'y a pas de pilotes intégrés ici — tout est géré via des packages tiers.



Dans cet article, nous allons décomposer comment se connecter à deux SGBD populaires : le relationnel PostgreSQL et l'orienté document MongoDB. Vous apprendrez quelles bibliothèques utiliser, comment configurer la connexion et comment effectuer des opérations CRUD de base. Les exemples sont destinés à iOS/macOS, mais le code fonctionnera également dans un environnement serveur.



PostgreSQL en Swift : Approche classique avec Vapor et Fluent



Choisir une bibliothèque

Pour travailler avec PostgreSQL en Swift, le standard de facto est Fluent — un ORM du framework Vapor. Fluent prend en charge PostgreSQL, MySQL, SQLite et MongoDB (via un pilote séparé). Si vous devez travailler sans Vapor, utilisez PostgresClientKit — un pilote de bas niveau.



Configuration de la connexion

Ajoutez la dépendance à Package.swift :

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


Configuration de base dans 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) // Ajouter des migrations app.migrations.add(CreateUser())}


Opérations CRUD avec le modèle Utilisateur comme exemple

Créons un modèle et une 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() }}


Exemple de requête dans un contrôleur :

// Créer un utilisateurlet user = User(name: "Alexey", email: "alex@example.com")try await user.save(on: req.db)

// Trouver tous les utilisateurslet users = try await User.query(on: req.db).all()

// Filtrer par emailllet filtered = try await User.query(on: req.db) .filter(\\.$email == "alex@example.com") .first()


Important : Fluent utilise l'asynchronie via EventLoopFuture ou async/await (à partir de Vapor 4.60+). Assurez-vous que votre environnement prend en charge Swift 5.5+.



MongoDB en Swift : Flexibilité des documents avec MongoKitten



Choisir un pilote

Pour MongoDB, la bibliothèque principale est MongoKitten. Elle prend en charge toutes les versions modernes de MongoDB, y compris Atlas (version cloud). Une alternative est MongoSwift de MongoDB Inc., mais MongoKitten est considéré comme plus "Swift-like" dans le style.



Connexion à la base de données

Ajoutez à Package.swift :

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


Exemple de connexion (pour iOS/macOS) :

                

Blogs

Book Recommendations