用Vapor連接數(shù)據(jù)庫(kù)是一件令人興奮的事畅姊,本篇就來(lái)介紹如何使用Vapor來(lái)連接PostgreSQL數(shù)據(jù)庫(kù)澎粟,將數(shù)據(jù)持久化唉韭。
在上一篇Vapor奇幻之旅(05 Fluent)中陶珠,我介紹了如何使用Fluent創(chuàng)建數(shù)據(jù)模型蒋譬,并在自帶的內(nèi)存數(shù)據(jù)庫(kù)中進(jìn)行增刪改查操作。用這種方法可以方便的進(jìn)行接口測(cè)試和數(shù)據(jù)測(cè)試愉适,不需要額外部署數(shù)據(jù)庫(kù)環(huán)境犯助,對(duì)于調(diào)試程序和測(cè)試來(lái)說(shuō)好處不言而喻。而在web應(yīng)用的使用中租副,對(duì)數(shù)據(jù)的持久化是必不可少的坐慰,于是我們就需要通過程序來(lái)連接數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)操作,這樣整個(gè)系統(tǒng)才算基本完整用僧。
什么是PostgreSQL结胀?
PostgresSQL是一個(gè)開源的面向?qū)ο蟮臄?shù)據(jù)庫(kù)赞咙,百度百科上的介紹非常不準(zhǔn)確,英文好的朋友還是建議看官方文檔:
PostgreSQL 10
PostgreSQL 9.6
這里不詳細(xì)解釋數(shù)據(jù)庫(kù)的用法糟港,我給出一些主要特性:
- 復(fù)雜查詢
- 支持外鍵
- 觸發(fā)器
- 可更新視圖
- 事務(wù)完整
- 多版本并發(fā)控制
PostgreSQL同樣具有非常靈活的可擴(kuò)展性攀操,支持大部分的sql標(biāo)準(zhǔn), 再加上是開源并免費(fèi)的,所以適用于任何用途秸抚,總的來(lái)說(shuō)就是好用不上火速和。
關(guān)于數(shù)據(jù)庫(kù)的用法這篇文章不會(huì)覆蓋太多,感興趣的朋友可以去看看相關(guān)的文章剥汤。
安裝PostgreSQL
官方給出的安裝方法:
在ubuntu上安裝
在Mac上安裝
下面是安裝步驟
-
ubuntu14.04:
1健芭、創(chuàng)建文件/etc/apt/sources.list.d/pgdg.list 并添加以下內(nèi)容
deb http://apt.postgresql.org/pub/repos/apt/ trusty-pgdg main
2、安裝
$ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | \
sudo apt-key add -
$ sudo apt-get update
-
ubuntu16.04:
1秀姐、創(chuàng)建文件/etc/apt/sources.list.d/pgdg.list 并添加以下內(nèi)容
deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main
2、安裝
$ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | \
sudo apt-key add -
$ sudo apt-get update
由于ubuntu系統(tǒng)中默認(rèn)root沒有權(quán)限操作postgreSQL若贮,需要切換到postgres這個(gè)用戶才能訪問
$ sudo su - postgres
測(cè)試是否安裝成功:
$ psql --help
- Mac:
簡(jiǎn)單粗暴:
$ brew install postgresql
$ ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents
$ postgres -D /usr/local/var/postgres
測(cè)試是否安裝成功:
$ psql --help
啟動(dòng)和停止:
// 停止postgresql
$ brew services stop postgresql
// 啟動(dòng)postgresql
$ brew services start postgresql
現(xiàn)在PostgreSQL已經(jīng)安裝好了省有,下面是幾個(gè)基本操作:
創(chuàng)建數(shù)據(jù)庫(kù):
$ createdb mydb
進(jìn)入我的數(shù)據(jù)庫(kù):
psql mydb
這時(shí)候你就可以在里面執(zhí)行sql了,記得輸入命令后加上分號(hào)(;)谴麦,否則回車代表?yè)Q行蠢沿。
圖形化工具pgAdmin
1、下載安裝pgAdmin
2匾效、添加一個(gè)新的server:
3舷蟀、指定一個(gè)server的名稱:
4、配置connection
5面哼、包促進(jìn)配置野宜,如果成功就會(huì)連接數(shù)據(jù)庫(kù),如果沒有成功魔策,請(qǐng)檢查配置是否正確匈子,成功后我們就可以看到我們的數(shù)據(jù)庫(kù)被成功添加了
項(xiàng)目中添加PostgreSQL Provider
修改前一篇文章項(xiàng)目中的Package.swift:
// swift-tools-version:4.0
import PackageDescription
let package = Package(
name: "VaporPostgreSQL",
products: [
.library(name: "App", targets: ["App"]),
.executable(name: "Run", targets: ["Run"])
],
dependencies: [
.package(url: "https://github.com/vapor/vapor.git", .upToNextMajor(from: "2.1.0")),
.package(url: "https://github.com/vapor/fluent-provider.git", .upToNextMajor(from: "1.3.0")),
.package(url: "https://github.com/vapor-community/postgresql-provider.git", .upToNextMajor(from: "2.1.0"))
],
targets: [
.target(
name: "App",
dependencies: ["Vapor", "FluentProvider", "PostgreSQLProvider"],
exclude: ["Config", "Database", "Localization", "Public", "Resources"]
),
.target(name: "Run", dependencies: ["App"]),
.testTarget(name: "AppTests", dependencies: ["App", "Testing"])
]
)
命令行到項(xiàng)目文件夾,更新vapor:
$ vapor update
待完成之后項(xiàng)目里就會(huì)集成 PostgreSQL Provider
如果此時(shí)運(yùn)行程序闯袒,會(huì)報(bào)找不到CPostgreSQL虎敦,我們需要添加這個(gè)lib的支持:
$ brew install postgresql pkg-config
在linux環(huán)境下執(zhí)行:
apt-get update
apt-get upgrade
apt-get install postgresql postgresql-contrib
這樣這個(gè)c庫(kù)就下載下來(lái)了
配置PostgreSQL Provider
1、在Config+Setup.swift中添加provider
import PostgreSQLProvider
...
/// Configure providers
private func setupProviders() throws {
try addProvider(FluentProvider.Provider.self)
try addProvider(PostgreSQLProvider.Provider.self)
}
2政敢、修改驅(qū)動(dòng):
在項(xiàng)目Config/fluent.json中修改driver屬性(默認(rèn)是memory):
"driver": "postgresql"
3其徙、配置連接:
創(chuàng)建Config/secrets/postgresql.json文件,在config文件夾下先創(chuàng)建secrets文件夾喷户,再創(chuàng)建postgresql.json文件唾那,并添加配置內(nèi)容:
{
"hostname": "127.0.0.1",
"user": "leacode",
"password": "12345",
"database": "leacode",
"port": 5432
}
也可以用url的形式來(lái)寫這個(gè)配置文件
{
"url": "psql://leacode: 12345@127.0.0.1:5432/leacode"
}
這時(shí)候運(yùn)行程序,執(zhí)行Vapor奇幻之旅(05 Fluent)中的增刪改查操作褪尝,可以看到和上一篇一樣的效果通贞,到這里朗若,我們的數(shù)據(jù)庫(kù)已經(jīng)連接完成。
背后發(fā)生了什么昌罩?
PostgreSQL Provider為我們提供了連接到數(shù)據(jù)庫(kù)的driver哭懈,就像pgAdmin 4一樣使我么你的程序能夠連接到數(shù)據(jù)庫(kù)進(jìn)行相應(yīng)的操作。
Fluent通過我們寫的Preparation來(lái)準(zhǔn)備數(shù)據(jù)庫(kù)的表:
extension Quotes: Preparation {
static func prepare(_ database: Database) throws {
try database.create(self) { quotes in
quotes.id()
quotes.string("author")
quotes.string("content")
quotes.string("description")
}
}
static func revert(_ database: Database) throws {
try database.delete(self)
}
}
通過pgAdmin可以查看Fluent到底創(chuàng)建了什么表:
看看fluent表里有些什么
可以看到fluent表中包含我們創(chuàng)建的對(duì)象茎用,其中Post是創(chuàng)建程序默認(rèn)的model遣总,可以刪掉,Quotes是我們自定義的一個(gè)model轨功,至此我們?cè)跊]有寫一句sql的情況下創(chuàng)建了數(shù)據(jù)庫(kù)的表旭斥,并完成了增刪改查操作。
現(xiàn)在古涧,當(dāng)我們重新運(yùn)行程序并執(zhí)行查詢操作時(shí)垂券,可以發(fā)現(xiàn)上一次運(yùn)行插入的數(shù)據(jù)依然存在,我們完成了數(shù)據(jù)的持久化羡滑。
后面我會(huì)補(bǔ)充一篇文章講解服務(wù)端數(shù)據(jù)庫(kù)的配置菇爪,關(guān)于Vapor其他知識(shí),可以參考以下文章:
Vapor奇幻之旅(01開始)
Vapor奇幻之旅(02部署)
Vapor奇幻之旅(03上手)
Vapor奇幻之旅(04Routing)
Vapor奇幻之旅(05 Fluent)
Vapor奇幻之旅(06 PostgreSQL)
Vapor奇幻之旅(07 連接服務(wù)端PostgreSQL)
Vapor奇幻之旅(08 連接服務(wù)端MongoDB)
Vapor奇幻之旅(09 連接MySQL)
希望你對(duì)我的教程能夠喜歡柒昏,你們的贊是我持續(xù)的動(dòng)力凳宙,歡迎加入QQ群參與互動(dòng):431296189