0x00 Chapter 6:Configuring a Database
1.Vapor has official, Swift-native drivers for:
- SQLite
- MySQL
- PostgreSQL
- MongoDB
2.数据库类型:
 关系型(relational):MySQL and PostgreSQL 非关系型(non-relational):MongoDB
SQLite 是一个简单的、基于文件的关系数据库系统。
 它旨在嵌入到应用程序中,对于单进程应用程序(例如 iOS 应用程序)很有用
MySQL become the most popular database due to its ease of use and support from most cloud providers and website builders
PostgreSQL 专为企业使用而设计。还原生支持几何图元,例如坐标
MongoDB 旨在处理大量非结构化数据并具有极高的可扩展性
3.使用 SQLite,需要的配置
SQLite doesn’t require you to run a database server since SQLite uses a local file
Package.swift 文件的配置
a.添加依赖
dependencies: [
.package(url: "https://github.com/vapor/fluent-sqlite-driver.git", from: "4.0.0")
]
b.给名为 App 的 target 添加依赖:
dependencies: [
.product(name: "FluentSQLiteDriver", package: "fluent-sqlite-driver")
]
完整的内容:
// swift-tools-version:5.5
import PackageDescription
let package = Package(
name: "TILApp",
platforms: [
.macOS(.v12)
],
dependencies: [
// 💧 A server-side Swift web framework.
.package(url: "https://github.com/vapor/vapor.git", from: "4.0.0"),
// SQLite
.package(url: "https://github.com/vapor/fluent-sqlite-driver.git", from: "4.0.0")
],
targets: [
.target(
name: "App",
dependencies: [
.product(name: "FluentSQLiteDriver", package: "fluent-sqlite-driver")
.product(name: "Vapor", package: "vapor")
],
swiftSettings: [
.unsafeFlags(["-cross-module-optimization"], .when(configuration: .release))
]
),
.executableTarget(name: "Run", dependencies: [.target(name: "App")]),
.testTarget(name: "AppTests", dependencies: [
.target(name: "App"),
.product(name: "XCTVapor", package: "vapor"),
])
]
)
configure.swift 文件的配置
a.导入 FluentSQLiteDriver
import FluentSQLiteDriver
b.configure 方法内添加
app.databases.use(.sqlite(.memory), as: .sqlite)
放在
app.migrations.add(CreateAcronym())
前面
如果要保存到文件
app.databases.use(.sqlite(.file("db.aqlite")), as: .sqlite)4.使用 MySQL,需要的配置
 run the MySQL server in a Docker container
在终端运行一个 MySQL server
docker run --name mysql \
-e MYSQL_USER=vapor_username \
-e MYSQL_PASSWORD=vapor_password \
-e MYSQL_DATABASE=vapor_database \
-e MYSQL_RANDOM_ROOT_PASSWORD=yes \
-p 3306:3306 \
-d mysql
检查数据库是否运行起来:
docker ps
Package.swift 文件的配置
a.添加依赖
dependencies: [
.package(url: "https://github.com/vapor/fluent-mysql-driver.git", from: "4.0.0")
]
b.给名为 App 的 target 添加依赖:
dependencies: [
.product(name: "FluentMySQLDriver", package: "fluent-mysql-driver")
]
configure.swift 文件的配置
a.导入 FluentMySQLDriver
import FluentMySQLDriver
b.configure 方法内添加
app.databases.use(.mysql(
hostname: Environment.get("DATABASE_HOST") ?? "localhost",
username: Environment.get("DATABASE_USERNAME") ?? "vapor_username",
password: Environment.get("DATABASE_PASSWORD") ?? "vapor_password",
database: Environment.get("DATABASE_NAME") ?? "vapor_database",
tlsConfiguration: .forClient(certificateVerification: .none)), as: .mysql)
放在
app.migrations.add(CreateAcronym())
前面
5.使用 MongoDB,需要的配置
 run the MongoDB server in a Docker container
 在终端运行一个 MySQL server
docker run --name mongo \
-e MONGO_INITDB_DATABASE=vapor \
-p 27017:27017 \
-d mongo
Package.swift 文件的配置
a.添加依赖
dependencies: [
.package(url: "https://github.com/vapor/fluent-mongo-driver.git", from: "1.0.0")
]
b.给名为 App 的 target 添加依赖:
dependencies: [
.product(name: "FluentMongoDriver", package: "fluent-mongo-driver")
]
configure.swift 文件的配置
a.导入 FluentMongoDriver
import FluentMongoDriver
b.configure 方法内添加
try app.databases.use(.mongo(connectionString: "mongodb://localhost:27017/vapor"), as: .mongo)
放在
app.migrations.add(CreateAcronym())
前面
6.使用 PostgreSQL,需要的配置
 run the PostgreSQL server in a Docker container
docker run --name postgres \
-e POSTGRES_DB=vapor_database \
-e POSTGRES_USER=vapor_username \
-e POSTGRES_PASSWORD=vapor_password \
-p 5432:5432 \
-d postgres
Package.swift 文件的配置
a.添加依赖
dependencies: [
.package(url: "https://github.com/vapor/fluent-postgres-driver.git", from: "2.0.0")
]
b.给名为 App 的 target 添加依赖:
dependencies: [
.product(name: "FluentPostgresDriver", package: "fluent-postgres-driver")
]
configure.swift 文件的配置
a.导入 FluentPostgresDriver
import FluentPostgresDriver
b.configure 方法内添加
app.databases.use(.postgres(
hostname: Environment.get("DATABASE_HOST") ?? "localhost",
username: Environment.get("DATABASE_USERNAME") ?? "vapor_username",
password: Environment.get("DATABASE_PASSWORD") ?? "vapor_password",
database: Environment.get("DATABASE_NAME") ?? "vapor_database"
), as: .psql)
放在
app.migrations.add(CreateAcronym())
前面
7.依赖对比

0x01 我的作品
                










