gpt4 book ai didi

swift - Vapor:将字节数组保存到 SQLite 数据库?

转载 作者:行者123 更新时间:2023-11-28 12:18:37 25 4
gpt4 key购买 nike

我无法将大型 (~20k) JSON blob 保存到 SQLite 数据库中。我用 builder.bytes("data") 创建了行,它在数据库文件中变成了一个 blob 行。当我尝试保存 Byte 数组时,出现此错误:

S Q Lite 驱动程序错误:不支持的命令:不支持数组值。] [标识符:Fluent.SQLiteDriverError.unsupported] [可能的原因:使用 sqlite 不支持的操作] [建议的修复:验证数据未损坏,如果sqlite应该支持的数据类型]

错误信息来自实现的switch语句here .

StructuredData 枚举中定义了一个单独的 bytes 案例,SQLDriver 似乎支持它,但我不知道如何到达那里。

我的类是这样定义的:

最终类 Blob:模型 { 让存储=存储()

let uuid: String
let revision: Int
let userId: Identifier
let data: Bytes


init(uuid inUuid: String, revision inRevision: Int, data inData: [UInt8], user: User) throws {
uuid = inUuid
userId = try user.assertExists()
revision = inRevision
data = inData
}

init(row: Row) throws {
uuid = try row.get("uuid")
userId = try row.get(User.foreignIdKey)
revision = try row.get("revision")
data = try row.get("data")
}

func makeRow() throws -> Row {
var row = Row()
try row.set("uuid", uuid)
try row.set(User.foreignIdKey, userId)
try row.set("revision", revision)
try row.set("data", data)
return row
}

这是使用 Vapor Toolbox 2.0.3 和 Vapor Framework 2.1.3。

最佳答案

在当前版本的 Vapor 2 中,在将字节数组与节点和其他结构化数据包装器相互转换时,您不能依赖 Fuzzy get/set 方法。

相反,您必须明确两个方向:

init(row: Row) throws {
// ...
data = row["data"]?.bytes ?? []
}

func makeRow() throws -> Row {
var row = Row()
// ...
try row.set("data", StructuredData.bytes(data))
return row
}

Here是 GitHub 上的相关问题。

关于swift - Vapor:将字节数组保存到 SQLite 数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45573712/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com