在 Swift 中操作数据库:PostgreSQL 和 MongoDB

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Swift 数据库操作入门

Swift 早已不再仅仅是移动开发的语言。随着 Vapor 和 Kitura 等服务端框架的出现,Swift 已成为构建后端解决方案的完整工具。任何服务端系统的关键方面都是数据库操作。在本文中,我们将探讨如何连接并与两种流行的数据库管理系统进行交互:关系型 PostgreSQL 和文档型 MongoDB。您将了解使用哪些库、如何配置连接以及如何在纯 Swift 中执行基本的 CRUD 操作。



Swift 中的 PostgreSQL:配置与基本操作

PostgreSQL 是最可靠的关系型数据库之一。在 Swift 中有多个库可用于与其交互,但最流行的是 PostgresNIO——一个基于 SwiftNIO 构建的异步驱动程序。如果您使用 Vapor 框架,则可以通过 ORM Fluent 简化 PostgreSQL 的操作。



通过 PostgresNIO 连接 PostgreSQL

首先添加依赖项。在 Package.swift 中添加:

// swift-tools-version:5.7import PackageDescription

let package = Package( name: "MyApp", dependencies: [ .package(url: "https://github.com/vapor/postgres-nio.git", from: "1.18.0") ], targets: [ .target(name: "MyApp", dependencies: [ .product(name: "PostgresNIO", package: "postgres-nio") ]) ])


连接并执行简单 SELECT 查询的示例:

import PostgresNIOimport NIOCoreimport NIOPosix

let eventLoopGroup = MultiThreadedEventLoopGroup(numberOfThreads: 1)

let config = PostgresConnection.Configuration( host: "localhost", port: 5432, username: "myuser", password: "mypassword", database: "mydb", tls: .disable)

let connection = try await PostgresConnection.connect( on: eventLoopGroup.next(), configuration: config)

let rows = try await connection.query("SELECT id, name FROM users LIMIT 5;", logger: nil)

for try await row in rows { let id: Int = try row["id"].decode(Int.self) let name: String = try row["name"].decode(String.self) print("User: \\(id) - \\(name)")}


使用 Vapor Fluent (ORM)

Fluent 提供了用于操作 PostgreSQL 的高级 API。用户模型如下所示:

import Fluentimport Vapor

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 }}

// 创建记录let user = User(name: "Иван", email: "ivan@example.com")try await user.save(on: req.db)

// 查询所有用户let users = try await User.query(on: req.db).all()


Swift 中的 MongoDB:文档操作

MongoDB 是一种 NoSQL 数据库,以 BSON(二进制 JSON)格式存储数据。对于 Swift,有由 MongoDB Inc. 开发的官方驱动程序 MongoSwift。它支持异步操作和同步模式。



安装并连接 MongoSwift

在 Package.swift 中添加依赖项:

dependencies: [    .package(url: "https://github.com/mongodb/mongo-swift-driver.git", from: "1.3.0")],targets: [    .target(name: "MyApp", dependencies: [        .product(name: "MongoSwift", package: "mongo-swift-driver")    ])]


连接到本地 MongoDB 并插入文档的示例:

import MongoSwift

let client = try MongoClient("mongodb://localhost:27017")let db = client.db("mydatabase")let collection = db.collection("u

博客

书籍推荐