Swift Vapor 教程(查询数据、插入数据)

news/2024/7/20 20:07:15 标签: swift, 开发语言, ios

上一篇简单写了 怎么创建 Swift Vapor 项目以及在开发过程中使用到的软件。
这一篇写一个怎么在创建的项目中创建一个简单的查询数据和插入数据。
注:数据库配置比较重要

先将本地的Docker启动起来,用Docker管理数据库

  1. 将项目自己创建的Todo相关的都删掉,使用自己创建的

  2. 创建自定义 Model (与数据库字段一一对应)

import Fluent
import Vapor
import Security

final class Song: Model, Content {
    
    static let schema: String = "songs"
    
    init() {
        
    }
    
    @ID(key: .id)
    var id:UUID?
    
    @Field(key: "title")
    var title: String

    init(id: UUID? = nil, title: String) {
        self.id = id
        self.title = title
    }
    
}
  1. 在 Migrations中创建与数据库交互代码(映射)
import Fluent

struct CreateSongs: Migration {
    
    // 创建数据库
    func prepare(on database: FluentKit.Database) -> NIOCore.EventLoopFuture<Void> {
        return database.schema("songs")
            .id()
            .field("title",.string,.required)
            .create()
    }
    
    func revert(on database: FluentKit.Database) -> NIOCore.EventLoopFuture<Void> {
        return database.schema("songs").delete()
    }
    
}
  1. 需要在 configure 文件中进行配置
// 添加配置代码
app.migrations.add(CreateSongs())
try app.autoMigrate().wait()
  1. 在 routes 文件中进行路由配置
import Fluent
import Vapor

func routes(_ app: Application) throws {
    app.get { req async in
        "It works!"
    }


    // 注册路由
    try app.register(collection: SongController())
    
}
  1. 在 Controllers中创建自己的代码
import Fluent
import Vapor

struct SongController: RouteCollection {
    
    func boot(routes: Vapor.RoutesBuilder) throws {
        let songs = routes.grouped("songs")
        songs.get(use: index)
        
        songs.post(use: create)
    }
    
    
    //  GET Request /songs route
    func index(req: Request) throws -> EventLoopFuture<[Song]> {
        return Song.query(on: req.db).all()
    }
    
    //  POST Request /songs create 增
    func create(req: Request) throws -> EventLoopFuture<HTTPStatus> {
        let song = try req.content.decode(Song.self)
        return song.save(on: req.db).transform(to: .ok)
    }
    
}

自此简单代码配置已经完成。

自此运行项目可能会出现报错现象,进入项目目录命令行工具中输入

docker-compose up db

docker创建了数据库需要启动(一种是手动启动、一种是使用命令启动)

如果顺利的话,项目就可以正常运行。
接下来使用 Postman进行调试

添加歌曲名称
上图为添加歌曲名称

获取歌曲列表
上图为获取歌曲列表

Docker中创建的数据库
上图Docker中数据库运行状态

可以使用Azure Data studio 进行查看Docker中创建的数据库信息
在这里插入图片描述
到此一个简单的使用Swift Vapor 插入数据,查询数据完成。


http://www.niftyadmin.cn/n/5364702.html

相关文章

深度学习(生成式模型)—— Consistency Models

文章目录 前言预备知识&#xff1a;SDE与ODEMethod实验结果 前言 Diffusion model需要多次推断才能生成最终的图像&#xff0c;这将耗费大量的计算资源。前几篇博客我们已经介绍了加速Diffusion model生成图像速率的DDIM和Stable Diffusion&#xff0c;本节将介绍最近大火的Co…

【算法与数据结构】583、72、LeetCode两个字符串的删除操作+编辑距离

文章目录 一、583、两个字符串的删除操作二、72、编辑距离三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、583、两个字符串的删除操作 思路分析&#xff1a;本题的思路和115、不同的子序列差不多&#xff0c;只是变成…

可控概率抽奖算法

说明 本文PHP语言去实现&#xff0c;只实现核心可控概率引擎&#xff0c;库存判断等其它业务需要其它代码配合实现。 代码 /*** function 封装可控概率的抽奖功能* param $arr array 数据集合* param $weight_key string 权重字段* return array 被选…

深度学习系列55:深度学习加速技术概述

总体有两个方向&#xff1a;模型优化 / 框架优化 1. 模型优化 1.1 量化 最常见的量化方法为线性量化&#xff0c;权重从float32量化为int8&#xff0c;将输入数据映射在[-128,127]的范围内。在 nvdia gpu&#xff0c;x86、arm 和 部分 AI 芯片平台上&#xff0c;均支持 8bit…

UE4 C++ 静态加载类和资源

静态加载类和资源&#xff1a;指在编译时加载&#xff0c;并且只能在构造函数中编写代码 .h //增加所需组件的头文件 #include "Components/SceneComponent.h" //场景组件 #include "Components/StaticMeshComponent.h" //静态网格体组件 #include &qu…

实用性再提升!DURATION 数据类型现已支持交易日历!

DolphinDB 自 2.00.9/1.30.21 版本开始&#xff0c;提供交易日历功能&#xff0c;并内置世界五十多个交易所的交易日历。借助交易日历&#xff0c;用户可以在 DolphinDB 中便捷查询指定范围内的交易日&#xff0c;或搭配内置函数&#xff0c;基于交易日进行日期偏移计算、数据采…

租用海外服务器丢包是什么情况?

在当今的互联网时代&#xff0c;海外服务器租用已经成为了许多企业和个人的选择。然而&#xff0c;在使用海外服务器的过程中&#xff0c;有时会出现丢包的情况&#xff0c;这给用户带来了不小的困扰。那么&#xff0c;租用海外服务器丢包是什么情况呢&#xff1f;本文将对此进…

【学习笔记】树上差分总结(点差分/边差分)

一.树上差分的基本概念 1.树上差分的定义 树上差分&#xff0c;顾名思义&#xff0c;意思就是在树上做差分。 至于什么是差分呢&#xff1f;如果不会的同学&#xff0c;可以先看看我的这篇博客:一维,二维差分の详解&#xff08;简单易懂&#xff09;_一维差分-CSDN博客 2.树…