配置数据库 封面
Vapor 大型教程

配置数据库

Vapor 3 原生支持 SQLite、MySQL、PostgreSQL 三种关系型数据库。本文带你认识它们,并学会用 configure.swift 把 SQLite 配起来开始开发。

Vapor 支持的数据库

Vapor 原生提供了三种数据库的驱动:SQLiteMySQLPostgreSQL

数据库分为两种:关系型数据库(SQL)非关系型数据库(NoSQL)。关系型数据库适合存放结构化的数据,目前 Vapor 只支持关系型数据库。但不久的将来也会支持非关系型数据库。

关系型数据库面临的问题是:已经存入数据库的结构在后期可能需要变更,非关系型数据库正是为了解决这个问题而生的。

SQLite

一个简单的基于文件的关系型数据库系统,设计目标是嵌入到应用中使用,对于单进程应用很有用。它依靠文件锁保证数据库完整性,所以不适合大量写入操作的应用,也不能跨服务器使用。它适合在开发原型和测试时使用。

MySQL

一个开源关系型数据库,流行于 LAMP 应用栈中,它很容易使用,同时被大多数云提供商支持。

PostgreSQL

一个开源关系数据库。主要设计目标是商用,扩展性和标准化是它的核心目标。

Docker

我们使用 Docker 在本地布置数据库,它有别于虚拟机,很方便。MySQL 和 PostgreSQL 可以使用 Docker 部署在本地。

只使用 SQLite 可以简化开发,适用于原型开发期

为了简化数据库配置,我们使用 SQLite 使用本地文件存放数据。配置数据库:

   /// Register providers first
    try services.register(FluentSQLiteProvider())

    // Configure a SQLite database
    let sqlite = try SQLiteDatabase(storage: .file(path: "db.sqlite"))

    /// Register the configured SQLite database to the database config.
    var databases = DatabasesConfig()
    databases.add(database: sqlite, as: .sqlite)
    services.register(databases)

    /// Configure migrations
    var migrations = MigrationConfig()
    migrations.add(model: Acronym.self, database: .sqlite)
    services.register(migrations)

对应的 Package.swift 需要加入 FluentSQLite 依赖:

// swift-tools-version:4.0
import PackageDescription

let package = Package(
    name: "TILApp",
    dependencies: [
        // 💧 A server-side Swift web framework.
        .package(url: "https://github.com/vapor/vapor.git", from: "3.0.0"),

        // 🔵 Swift ORM (queries, models, relations, etc) built on SQLite 3.
        .package(url: "https://github.com/vapor/fluent-sqlite.git", from: "3.0.0")
    ],
    targets: [
        .target(name: "App", dependencies: ["FluentSQLite", "Vapor"]),
        .target(name: "Run", dependencies: ["App"]),
        .testTarget(name: "AppTests", dependencies: ["App"])
    ]

数据库配置是怎么工作的

数据库的配置主要在 configure.swift 文件中完成。


本系列其他文章