SQLite.Swift - 查询现有数据库 table
SQLite.Swift - Querying an existing Db table
我刚刚了解 SQLite.swift 并且正在阅读有关它的文档。我正在尝试查询现有的 table,但我不知道如何执行此操作。在文档中,它显示了如何查询创建的 table(如下所示 https://github.com/stephencelis/SQLite.swift/blob/master/Documentation/Index.md#selecting-rows)
let users = Table("users")
try db.run(users.create { t in // CREATE TABLE "users" (
t.column(id, primaryKey: true) // "id" INTEGER PRIMARY KEY NOT NULL,
t.column(email, unique: true) // "email" TEXT UNIQUE NOT NULL,
t.column(name) // "name" TEXT
})
// )
for user in try db.prepare(users) {
print("id: \(user[id]), email: \(user[email]), name: \(user[name])")
// id: 1, email: alice@mac.com, name: Optional("Alice")
}
// SELECT * FROM "users"
我有一个现有的 table,我可以连接到它,但我能够从中获取信息的唯一方法是 db.scalar,但不确定这是否是正确的做法。
let home = FileManager.default.homeDirectoryForCurrentUser
let dbURL = "Desktop/MyPracticeCode/EpubParser/"
let myPath = home.appendingPathComponent(dbURL)
let db = try Connection("\(myPath)/TestTable.sqlite3")
print(db.scalar("SELECT WtName FROM MyTable"))
这会打印出我需要的数据,但不确定这是否是正确的方法。有没有办法将我现有的 table 分配给类型“Table”并像他们在示例中那样查询它。我在网上到处搜索,但找不到明确的答案。谢谢
我想出了答案。如果有人 运行 遇到这个问题或同样的问题,这就是我设法解决它的方法。仍然不确定这是否是正确的方法。基本上,您需要像示例中一样使用列重新创建 table,但使用列的名称。创建一个 table 并将其命名为与数据库中的 table 完全相同的名称。以下是我的做法
let id = Expression<Int64>("id")
let Article = Expression<String?>("Article")
let ArticleName = Expression<String?>("ArticleName")
let ImageThumbnail = Expression<String?>("ImageThumbnail")
let WtCoverImage = Expression<String?>("WtCoverImage")
let myTable = Table("MyTable")
try db.run(myTable.create(ifNotExists: true){ t in
t.column(id,primaryKey: true)
t.column(Article)
t.column(ArticleName)
t.column(ImageThumbnail)
t.column(WtCoverImage)
})
这是我用的:
try db.run(users.create(ifNotExists: true) { t in /* ... */ })
// CREATE TABLE "users" IF NOT EXISTS -- ...
现在我可以这样查询了
for myData in try db.prepare(myTable){
print("WtCoverImage\(myData[WtCoverImage])")
}
我刚刚了解 SQLite.swift 并且正在阅读有关它的文档。我正在尝试查询现有的 table,但我不知道如何执行此操作。在文档中,它显示了如何查询创建的 table(如下所示 https://github.com/stephencelis/SQLite.swift/blob/master/Documentation/Index.md#selecting-rows)
let users = Table("users")
try db.run(users.create { t in // CREATE TABLE "users" (
t.column(id, primaryKey: true) // "id" INTEGER PRIMARY KEY NOT NULL,
t.column(email, unique: true) // "email" TEXT UNIQUE NOT NULL,
t.column(name) // "name" TEXT
})
// )
for user in try db.prepare(users) {
print("id: \(user[id]), email: \(user[email]), name: \(user[name])")
// id: 1, email: alice@mac.com, name: Optional("Alice")
}
// SELECT * FROM "users"
我有一个现有的 table,我可以连接到它,但我能够从中获取信息的唯一方法是 db.scalar,但不确定这是否是正确的做法。
let home = FileManager.default.homeDirectoryForCurrentUser
let dbURL = "Desktop/MyPracticeCode/EpubParser/"
let myPath = home.appendingPathComponent(dbURL)
let db = try Connection("\(myPath)/TestTable.sqlite3")
print(db.scalar("SELECT WtName FROM MyTable"))
这会打印出我需要的数据,但不确定这是否是正确的方法。有没有办法将我现有的 table 分配给类型“Table”并像他们在示例中那样查询它。我在网上到处搜索,但找不到明确的答案。谢谢
我想出了答案。如果有人 运行 遇到这个问题或同样的问题,这就是我设法解决它的方法。仍然不确定这是否是正确的方法。基本上,您需要像示例中一样使用列重新创建 table,但使用列的名称。创建一个 table 并将其命名为与数据库中的 table 完全相同的名称。以下是我的做法
let id = Expression<Int64>("id")
let Article = Expression<String?>("Article")
let ArticleName = Expression<String?>("ArticleName")
let ImageThumbnail = Expression<String?>("ImageThumbnail")
let WtCoverImage = Expression<String?>("WtCoverImage")
let myTable = Table("MyTable")
try db.run(myTable.create(ifNotExists: true){ t in
t.column(id,primaryKey: true)
t.column(Article)
t.column(ArticleName)
t.column(ImageThumbnail)
t.column(WtCoverImage)
})
这是我用的:
try db.run(users.create(ifNotExists: true) { t in /* ... */ })
// CREATE TABLE "users" IF NOT EXISTS -- ...
现在我可以这样查询了
for myData in try db.prepare(myTable){
print("WtCoverImage\(myData[WtCoverImage])")
}