前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Vapor奇幻之旅(06 PostgreSQL)

Vapor奇幻之旅(06 PostgreSQL)

作者头像
Leacode
发布2018-08-22 14:17:18
1.1K0
发布2018-08-22 14:17:18
举报
文章被收录于专栏:代码散人代码散人

用Vapor连接数据库是一件令人兴奋的事,本篇就来介绍如何使用Vapor来连接PostgreSQL数据库,将数据持久化。

在上一篇Vapor奇幻之旅(05 Fluent)中,我介绍了如何使用Fluent创建数据模型,并在自带的内存数据库中进行增删改查操作。用这种方法可以方便的进行接口测试和数据测试,不需要额外部署数据库环境,对于调试程序和测试来说好处不言而喻。而在web应用的使用中,对数据的持久化是必不可少的,于是我们就需要通过程序来连接数据库进行数据操作,这样整个系统才算基本完整。

什么是PostgreSQL?

PostgresSQL是一个开源的面向对象的数据库,百度百科上的介绍非常不准确,英文好的朋友还是建议看官方文档:

PostgreSQL 10

PostgreSQL 9.6

这里不详细解释数据库的用法,我给出一些主要特性:

  • 复杂查询
  • 支持外键
  • 触发器
  • 可更新视图
  • 事务完整
  • 多版本并发控制

PostgreSQL同样具有非常灵活的可扩展性,支持大部分的sql标准, 再加上是开源并免费的,所以适用于任何用途,总的来说就是好用不上火。

关于数据库的用法这篇文章不会覆盖太多,感兴趣的朋友可以去看看相关的文章。

安装PostgreSQL

官方给出的安装方法:

在ubuntu上安装

在Mac上安装

下面是安装步骤

  • ubuntu14.04: 1、创建文件/etc/apt/sources.list.d/pgdg.list 并添加以下内容
代码语言:javascript
复制
deb http://apt.postgresql.org/pub/repos/apt/ trusty-pgdg main

2、安装

代码语言:javascript
复制
$ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | \
  sudo apt-key add -
$ sudo apt-get update
  • ubuntu16.04: 1、创建文件/etc/apt/sources.list.d/pgdg.list 并添加以下内容
代码语言:javascript
复制
deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main

2、安装

代码语言:javascript
复制
$ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | \
  sudo apt-key add -
$ sudo apt-get update

由于ubuntu系统中默认root没有权限操作postgreSQL,需要切换到postgres这个用户才能访问

代码语言:javascript
复制
$ sudo su - postgres

测试是否安装成功:

代码语言:javascript
复制
$ psql --help
  • Mac:

简单粗暴:

代码语言:javascript
复制
$ brew install postgresql
$ ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents
$ postgres -D /usr/local/var/postgres

测试是否安装成功:

代码语言:javascript
复制
$ psql --help

启动和停止:

代码语言:javascript
复制
// 停止postgresql
$ brew services stop postgresql
// 启动postgresql
$ brew services start postgresql

现在PostgreSQL已经安装好了,下面是几个基本操作:

创建数据库:

代码语言:javascript
复制
$ createdb mydb

进入我的数据库:

代码语言:javascript
复制
psql mydb

这时候你就可以在里面执行sql了,记得输入命令后加上分号(;),否则回车代表换行。

图形化工具pgAdmin

1、下载安装pgAdmin

2、添加一个新的server:

点击按钮添加新的server

3、指定一个server的名称:

image.png

4、配置connection

image.png

5、包促进配置,如果成功就会连接数据库,如果没有成功,请检查配置是否正确,成功后我们就可以看到我们的数据库被成功添加了

image.png

项目中添加PostgreSQL Provider

修改前一篇文章项目中的Package.swift:

代码语言:javascript
复制
// 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"])
    ]
)

命令行到项目文件夹,更新vapor:

代码语言:javascript
复制
$ vapor update

待完成之后项目里就会集成 PostgreSQL Provider

如果此时运行程序,会报找不到CPostgreSQL,我们需要添加这个lib的支持:

代码语言:javascript
复制
$ brew install postgresql pkg-config

在linux环境下执行:

代码语言:javascript
复制
apt-get update
apt-get upgrade
apt-get install postgresql postgresql-contrib

这样这个c库就下载下来了

配置PostgreSQL Provider

1、在Config+Setup.swift中添加provider

代码语言:javascript
复制
import PostgreSQLProvider

...

/// Configure providers
    private func setupProviders() throws {
        try addProvider(FluentProvider.Provider.self)
        try addProvider(PostgreSQLProvider.Provider.self)
    }

2、修改驱动:

在项目Config/fluent.json中修改driver属性(默认是memory):

代码语言:javascript
复制
"driver": "postgresql"

3、配置连接:

创建Config/secrets/postgresql.json文件,在config文件夹下先创建secrets文件夹,再创建postgresql.json文件,并添加配置内容:

代码语言:javascript
复制
{
    "hostname": "127.0.0.1",
    "user": "leacode",
    "password": "12345",
    "database": "leacode",
    "port": 5432
}

也可以用url的形式来写这个配置文件

代码语言:javascript
复制
{
    "url": "psql://leacode: 12345@127.0.0.1:5432/leacode"
}

这时候运行程序,执行Vapor奇幻之旅(05 Fluent)中的增删改查操作,可以看到和上一篇一样的效果,到这里,我们的数据库已经连接完成。

背后发生了什么?

PostgreSQL Provider为我们提供了连接到数据库的driver,就像pgAdmin 4一样使我么你的程序能够连接到数据库进行相应的操作。

Fluent通过我们写的Preparation来准备数据库的表:

代码语言:javascript
复制
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到底创建了什么表:

image.png

看看fluent表里有些什么

image.png

可以看到fluent表中包含我们创建的对象,其中Post是创建程序默认的model,可以删掉,Quotes是我们自定义的一个model,至此我们在没有写一句sql的情况下创建了数据库的表,并完成了增删改查操作。

现在,当我们重新运行程序并执行查询操作时,可以发现上一次运行插入的数据依然存在,我们完成了数据的持久化。

后面我会补充一篇文章讲解服务端数据库的配置,关于Vapor其他知识,可以参考以下文章:

Vapor奇幻之旅(01开始)

Vapor奇幻之旅(02部署)

Vapor奇幻之旅(03上手)

Vapor奇幻之旅(04Routing)

Vapor奇幻之旅(05 Fluent)

Vapor奇幻之旅(06 PostgreSQL)

Vapor奇幻之旅(07 连接服务端PostgreSQL)

Vapor奇幻之旅(08 连接服务端MongoDB)

Vapor奇幻之旅(09 连接MySQL)

希望你对我的教程能够喜欢,你们的赞是我持续的动力,欢迎加入QQ群参与互动:431296189

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.01.24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是PostgreSQL?
  • 安装PostgreSQL
  • 图形化工具pgAdmin
  • 项目中添加PostgreSQL Provider
  • 配置PostgreSQL Provider
  • 背后发生了什么?
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档