A pure Swift framework wrapping SQLite3.
SQLite.swift aims to be small, simple, and safe.
- A lightweight, uncomplicated query and parameter binding interface
- A flexible, chainable query builder
- Safe, automatically-typed data access
- Transactions with implicit commit/rollback
- Developer-friendly error handling and debugging
- Well-documented
- Extensively tested
Explore interactively from the Xcode project’s playground.
import SQLite
let db = Database("path/to/db.sqlite3")
db.execute(
    "CREATE TABLE users (" +
        "id INTEGER PRIMARY KEY, " +
        "email TEXT NOT NULL UNIQUE, " +
        "manager_id INTEGER, " +
        "FOREIGN KEY(manager_id) REFERENCES users(id)" +
    ")"
)
let stmt = db.prepare("INSERT INTO users (email) VALUES (?)")
for email in ["[email protected]", "[email protected]"] {
    stmt.run(email)
}
db.totalChanges // 2
db.lastChanges  // {Some 1}
db.lastID       // {Some 2}
for row in db.prepare("SELECT id, email FROM users") {
    println("id: \(row[0]), email: \(row[1])")
    // id: Optional(1), email: Optional("[email protected]")
    // id: Optional(2), email: Optional("[email protected]")
}
db.scalar("SELECT count(*) FROM users") // {Some 2}
let jr = db.prepare("INSERT INTO users (email, manager_id) VALUES (?, ?)")
db.transaction(
    stmt.run("[email protected]"),
    jr.run("[email protected]", db.lastID)
)SQLite.swift also exposes a powerful query building interface.
let products = db["products"]
let available = products.filter("quantity > ?", 0).order("name").limit(5)
for product in available {
    println(product["name"])
}
// SELECT * FROM products WHERE quantity > 0 ORDER BY name LIMIT 5
products.count            // SELECT count(*) FROM products
products.average("price") // SELECT avg(price) FROM products
if let id = products.insert(["name": "Sprocket", "price": 19.99]) {
    println("inserted \(id)")
}
// INSERT INTO products (name, price) VALUES ('Sprocket', 19.99)
let updates: Int = products.filter(["id": id]).update(["quantity": 20])
// UPDATE products SET quantity = 20 WHERE id = 42
let deletes: Int = products.filter(["quantity": 0]).delete()
// DELETE FROM products WHERE quantity = 0Note: SQLite.swift requires Swift 1.1 (available in Xcode 6.1).
To install SQLite.swift:
- 
Drag the SQLite.xcodeproj file into your own project. (Submodule, clone, or download the project first.) 
- 
In your target’s Build Phases, add SQLite iOS (or SQLite Mac) to the Target Dependencies build phase. 
- 
Add the appropriate SQLite.framework product to the Link Binary With Libraries build phase. 
- 
Add the same SQLite.framework to a Copy Files build phase with a Frameworks destination. (Add a new build phase if need be.) 
- Found a bug or have a feature request? Open an issue.
- Want to contribute? Submit a pull request.
SQLite.swift is available under the MIT license. See the LICENSE file for more information.
Looking for something else? Try another Swift wrapper (or FMDB):

