swift Vapor - 操作无法完成。 (MySQL.Error 错误 4。)

swift Vapor - The operation couldn’t be completed. (MySQL.Error error 4.)

我不断收到此错误。

我正在确认 mysql 服务器是 运行 在我的 MAC 机器上,我已经在 mysql 服务器中为这个项目创建了一个数据库。

  1. Below is my main.swift
import Vapor
import VaporMySQL

let drop = Droplet()

try drop.addProvider(VaporMySQL.Provider.self)

drop.preparations = [Student.self]

let _ = HomeController(drop: drop)

drop.run()
  1. Below is my HomeController.swift
import Vapor
import HTTP
import Foundation

final class HomeController {

    var drop: Droplet

    init(drop: Droplet) {
        self.drop = drop

    let studentsGroup = self.drop.grouped("/")
    studentsGroup.get(handler: homePageWithBankList)
    }

    func homePageWithBankList(request: Request) throws -> ResponseRepresentable {

    do {
        var student = Student()
        student.name = "name"
        try student.save()         // Here error raise
    } catch {
        print(error.localizedDescription)    // Getting error log here
    }

    return ""

    }
}
  1. Below is my Student.swift model class
import Vapor

final class Student: Model {

    var id: Node?
    var exists: Bool = false

    var name: String = ""

    init() {
        self.id = nil
    }

    init(node: Node, in context: Context) throws {
        id = try node.extract("id")
        name = try node.extract("name")
    }

    public func makeNode(context: Context) throws -> Node {
        return try Node(node:[
            "id": id,
            "name": name
            ])
    }

    static func prepare(_ database: Database) throws {
        try database.create("student") { student in
            student.id()
            student.string("name")
        }
    }

    static func revert(_ database: Database) throws {
        try database.delete("student")
    }

}
  1. Below is mysql.json config file
{
    "host": "localhost",
    "user": "root",
    "password": "admin",
    "database": "studentsDB",
    "port": "3306",
    "encoding": "utf8"
}
  1. Below are my package dependencies
    dependencies: [
        .Package(url: "https://github.com/vapor/vapor.git", majorVersion: 1, minor: 5),
        .Package(url: "https://github.com/vapor/mysql-provider.git", majorVersion: 1, minor: 1)
    ]
  1. Below is running mysql --version on my MAC
mysql  Ver 14.14 Distrib 5.7.17, for osx10.12 (x86_64) using  EditLine wrapper

EDIT:- I have this project on GitHub >>Here<<

所以这是初学者的错误:)

首先,改变

do {
        var student = Student()
        student.name = "name"
        try student.save()         // Here error raise
    } catch {
        print(error.localizedDescription)    // Getting error log here
    }

var student = Student()
student.name = "name"
do {
    try student.save()
} catch {
    print(error)
}

看看哪里出了问题

因此,您尝试使用 students - table 但在准备过程中创建了 student

改变

try database.create("student") { student in } ...

try database.create("students") { student in } ...

否则,您可以在模型声明中指定 table名称

final class Student: Model {
    static var entity = "student"    
    ...
}

看看文档总是好的

Vapor Documentation