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 我的作品
欢迎体验我的作品之一:小五笔
小程序
学习五笔的好帮手!
微信搜索 xwubi
即可~