Vapor:将字节数组保存到 SQLite 数据库?
Vapor: Saving Byte array to SQLite database?
我无法将大型 (~20k) JSON blob 保存到 SQLite 数据库中。我用 builder.bytes("data")
创建了行,它在数据库文件中变成了 blob
行。当我尝试保存一个字节数组时,我得到这个错误:
S Q Lite Driver Error: Unsupported Command: Array values not supported.] [Identifier: Fluent.SQLiteDriverError.unsupported] [Possible Causes: using operations not supported by sqlite] [Suggested Fixes: verify data is not corrupt if data type should be supported by sqlite]
错误消息来自实现的 switch 语句 here。
在 StructuredData
枚举中定义了一个单独的 bytes
案例,SQLDriver 似乎支持它,但我不知道如何到达那里。
我的 class 是这样定义的:
最终class 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 中,在转换字节数组 from/to 节点和其他 StructuredDataWrappers 时不能依赖 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 上的相关问题。
我无法将大型 (~20k) JSON blob 保存到 SQLite 数据库中。我用 builder.bytes("data")
创建了行,它在数据库文件中变成了 blob
行。当我尝试保存一个字节数组时,我得到这个错误:
S Q Lite Driver Error: Unsupported Command: Array values not supported.] [Identifier: Fluent.SQLiteDriverError.unsupported] [Possible Causes: using operations not supported by sqlite] [Suggested Fixes: verify data is not corrupt if data type should be supported by sqlite]
错误消息来自实现的 switch 语句 here。
在 StructuredData
枚举中定义了一个单独的 bytes
案例,SQLDriver 似乎支持它,但我不知道如何到达那里。
我的 class 是这样定义的:
最终class 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 中,在转换字节数组 from/to 节点和其他 StructuredDataWrappers 时不能依赖 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 上的相关问题。