Rope 为服务器端的 Swift 3 提供了一种方便、易用且类型安全的 PostgreSQL
访问方式。
它使用线程安全、高性能的 libpq
库。
Rope 非常简单,您只需要学习 3 个方法
connect()
用于创建连接query()
用于运行查询rows()
用于将查询结果转换为二维数组// credential struct as helper
let creds = RopeCredentials(host: "localhost", port: 5432, dbName: "mydb",
user: "foo", password: "bar")
// establish connection using the struct, returns nil on error
guard let db = try? Rope.connect(credentials: creds) else {
print("Could not connect to Postgres")
return
}
// run INSERT query, it returns nil on a syntax or connection error
// the insert is SQL-injection safe due to the use of dollar params!
let text = "Hello World"
guard let _ = try? db.query("INSERT INTO my_table (my_text) VALUES($1)')", params: [text]) else {
print("Could not insert \(text) into database");
return
}
// run SELECT query, it returns nil on a syntax or connection error
guard let res = try? db.query("SELECT id, my_text FROM my_table") else {
print("Could not fetch id & my_text from database")
return
}
// execute statements with params (SQL-injection safe)
guard let res = try? db.query("SELECT * FROM my_table WHERE my_text=$1", params: ["Hello World"]) else {
print("Could not fetch id & my_text from database")
return
}
// handle errors with a do/catch
do {
let res = try db.query("SELECT id, my_text FROM my_table")
} catch {
// Error handling
}
// turn result into 2-dimensional array
if let rows = res?.rows() {
for row in rows {
let id = row["id"] as? Int
let myText = row["my_text"] as? String
}
}
serial
、bigserial
、smallint
、integer
和 bigint
类型返回为 Int
real
和 double
精度类型返回为 Float
char
、varchar
和 text
类型返回为 String
json
类型转换为 Dictionary
,类型为 [String: Any?]
boolean
类型返回为 Bool
date
、timestamp
类型返回为 Date
Rope 的单元测试需要运行 Postgres 9.x 数据库,您可以选择通过环境变量或 CLI 参数提供数据库凭据,或者使用内置的默认值。
如果您的数据库具有以下设置,则所有测试都可以在没有任何其他配置的情况下运行
主机: "localhost"
端口: 5432
数据库名称: "rope"
用户: "postgres"
密码: ""
您可以轻松地通过环境变量提供数据库凭据。 请参阅 RopeTestCredentials.swift
文件。 另请参阅有关如何使用 RopeCredentials 建立连接的单元测试。
对于 Xcode 中的环境变量,请通过 Edit Scheme
> Arguments
使用 Environment Variables
或 Arguments Passend On Launch
输入以下信息
DATABASE_HOST
DATABASE_PORT
DATABASE_NAME
DATABASE_USER
DATABASE_PASSWORD
swift build DATABASE_HOST=mydatabase_host DATABASE_PORT=mydatabase_port DATABASE_NAME=mydatabase_dbname DATABASE_USER=mydatabase_user DATABASE_PASSWORD=mydatabase_very_secure_password
要在 CLI 中运行测试,只需输入 swift test
。
源代码使用 SwiftLint 格式化,所有 commits & PRs 都需要没有任何 SwiftLint 警告或错误。
Rope 由 Thomas Catterall (@swizzlr), Johannes Erhardt (@johanneserhardt), Sebastian Kreutzberger (@skreutzberger) 维护。
非常欢迎贡献。您可以处理现有的 Github issue,也可以在新的 Github issue 中与我们讨论您的想法。 谢谢 🙌
Rope 在 Apache 2.0 许可证 下发布。