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 类型返回为 Intreal 和 double 精度类型返回为 Floatchar、varchar 和 text 类型返回为 Stringjson 类型转换为 Dictionary,类型为 [String: Any?]boolean 类型返回为 Booldate、timestamp 类型返回为 DateRope 的单元测试需要运行 Postgres 9.x 数据库,您可以选择通过环境变量或 CLI 参数提供数据库凭据,或者使用内置的默认值。
如果您的数据库具有以下设置,则所有测试都可以在没有任何其他配置的情况下运行
主机: "localhost"端口: 5432数据库名称: "rope"用户: "postgres"密码: ""您可以轻松地通过环境变量提供数据库凭据。 请参阅 RopeTestCredentials.swift 文件。 另请参阅有关如何使用 RopeCredentials 建立连接的单元测试。
对于 Xcode 中的环境变量,请通过 Edit Scheme > Arguments 使用 Environment Variables 或 Arguments Passend On Launch 输入以下信息
DATABASE_HOSTDATABASE_PORTDATABASE_NAMEDATABASE_USERDATABASE_PASSWORDswift 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 许可证 下发布。