2026-01-24 22:40:22 +00:00
<!DOCTYPE html>
<!-- retoor <retoor@molodetz.nl> -->
< html lang = "en" >
< head >
< meta charset = "UTF-8" >
< meta name = "viewport" content = "width=device-width, initial-scale=1.0" >
< title > sqlite - Wren-CLI Manual</ title >
< link rel = "stylesheet" href = "../css/style.css" >
</ head >
< body >
< button class = "mobile-menu-toggle" > Menu</ button >
< div class = "container" >
< aside class = "sidebar" >
< div class = "sidebar-header" >
< h1 >< a href = "../index.html" > Wren-CLI</ a ></ h1 >
< div class = "version" > v0.4.0</ div >
</ div >
< nav class = "sidebar-nav" >
< div class = "section" >
< span class = "section-title" > Getting Started</ span >
< ul >
< li >< a href = "../getting-started/index.html" > Overview</ a ></ li >
< li >< a href = "../getting-started/installation.html" > Installation</ a ></ li >
< li >< a href = "../getting-started/first-script.html" > First Script</ a ></ li >
< li >< a href = "../getting-started/repl.html" > Using the REPL</ a ></ li >
</ ul >
</ div >
< div class = "section" >
< span class = "section-title" > Language</ span >
< ul >
< li >< a href = "../language/index.html" > Syntax Overview</ a ></ li >
< li >< a href = "../language/classes.html" > Classes</ a ></ li >
< li >< a href = "../language/methods.html" > Methods</ a ></ li >
< li >< a href = "../language/control-flow.html" > Control Flow</ a ></ li >
< li >< a href = "../language/fibers.html" > Fibers</ a ></ li >
< li >< a href = "../language/modules.html" > Modules</ a ></ li >
</ ul >
</ div >
< div class = "section" >
< span class = "section-title" > API Reference</ span >
< ul >
< li >< a href = "index.html" > Overview</ a ></ li >
2026-01-25 03:58:39 +00:00
< li >< a href = "string.html" > String</ a ></ li >
< li >< a href = "number.html" > Num</ a ></ li >
2026-01-24 22:40:22 +00:00
< li >< a href = "http.html" > http</ a ></ li >
< li >< a href = "websocket.html" > websocket</ a ></ li >
< li >< a href = "tls.html" > tls</ a ></ li >
< li >< a href = "net.html" > net</ a ></ li >
< li >< a href = "dns.html" > dns</ a ></ li >
< li >< a href = "json.html" > json</ a ></ li >
< li >< a href = "base64.html" > base64</ a ></ li >
< li >< a href = "regex.html" > regex</ a ></ li >
< li >< a href = "jinja.html" > jinja</ a ></ li >
< li >< a href = "crypto.html" > crypto</ a ></ li >
< li >< a href = "os.html" > os</ a ></ li >
< li >< a href = "env.html" > env</ a ></ li >
< li >< a href = "signal.html" > signal</ a ></ li >
< li >< a href = "subprocess.html" > subprocess</ a ></ li >
< li >< a href = "sqlite.html" class = "active" > sqlite</ a ></ li >
< li >< a href = "datetime.html" > datetime</ a ></ li >
< li >< a href = "timer.html" > timer</ a ></ li >
< li >< a href = "io.html" > io</ a ></ li >
2026-01-25 03:58:39 +00:00
< li >< a href = "pathlib.html" > pathlib</ a ></ li >
2026-01-24 22:40:22 +00:00
< li >< a href = "scheduler.html" > scheduler</ a ></ li >
< li >< a href = "math.html" > math</ a ></ li >
</ ul >
</ div >
< div class = "section" >
< span class = "section-title" > Tutorials</ span >
< ul >
< li >< a href = "../tutorials/index.html" > Tutorial List</ a ></ li >
</ ul >
</ div >
< div class = "section" >
< span class = "section-title" > How-To Guides</ span >
< ul >
< li >< a href = "../howto/index.html" > How-To List</ a ></ li >
</ ul >
</ div >
</ nav >
</ aside >
< main class = "content" >
< nav class = "breadcrumb" >
< a href = "../index.html" > Home</ a >
< span class = "separator" > /</ span >
< a href = "index.html" > API Reference</ a >
< span class = "separator" > /</ span >
< span > sqlite</ span >
</ nav >
< article >
< h1 > sqlite</ h1 >
< p > The < code > sqlite</ code > module provides SQLite database functionality for persistent data storage.</ p >
< pre >< code > import "sqlite" for Sqlite</ code ></ pre >
< h2 > Sqlite Class</ h2 >
< div class = "class-header" >
< h3 > Sqlite</ h3 >
< p > SQLite database connection</ p >
</ div >
< h3 > Constructors</ h3 >
< div class = "method-signature" >
< span class = "method-name" > Sqlite.open</ span > (< span class = "param" > path</ span > ) → < span class = "type" > Sqlite</ span >
</ div >
< p > Opens or creates an SQLite database file.</ p >
< ul class = "param-list" >
< li >< span class = "param-name" > path</ span > < span class = "param-type" > (String)</ span > - Path to the database file</ li >
< li >< span class = "returns" > Returns:</ span > Database connection</ li >
</ ul >
< pre >< code > var db = Sqlite.open("data.db")</ code ></ pre >
< h3 > Methods</ h3 >
< div class = "method-signature" >
< span class = "method-name" > execute</ span > (< span class = "param" > sql</ span > ) → < span class = "type" > List</ span >
</ div >
< p > Executes an SQL statement and returns the results.</ p >
< ul class = "param-list" >
< li >< span class = "param-name" > sql</ span > < span class = "param-type" > (String)</ span > - SQL statement</ li >
< li >< span class = "returns" > Returns:</ span > List of result rows (each row is a Map)</ li >
</ ul >
< pre >< code > var rows = db.execute("SELECT * FROM users")
for (row in rows) {
System.print(row["name"])
}</ code ></ pre >
< div class = "method-signature" >
< span class = "method-name" > execute</ span > (< span class = "param" > sql</ span > , < span class = "param" > params</ span > ) → < span class = "type" > List</ span >
</ div >
< p > Executes a parameterized SQL statement (prevents SQL injection).</ p >
< ul class = "param-list" >
< li >< span class = "param-name" > sql</ span > < span class = "param-type" > (String)</ span > - SQL with ? placeholders</ li >
< li >< span class = "param-name" > params</ span > < span class = "param-type" > (List)</ span > - Parameter values</ li >
</ ul >
< pre >< code > var rows = db.execute("SELECT * FROM users WHERE age > ?", [18])</ code ></ pre >
< div class = "method-signature" >
< span class = "method-name" > lastInsertId</ span > → < span class = "type" > Num</ span >
</ div >
< p > Returns the row ID of the last INSERT operation.</ p >
< div class = "method-signature" >
< span class = "method-name" > close</ span > ()
</ div >
< p > Closes the database connection.</ p >
< h2 > Examples</ h2 >
< h3 > Creating Tables</ h3 >
< pre >< code > import "sqlite" for Sqlite
var db = Sqlite.open("app.db")
db.execute("
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT UNIQUE,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
)
")
db.close()</ code ></ pre >
< h3 > Inserting Data</ h3 >
< pre >< code > import "sqlite" for Sqlite
var db = Sqlite.open("app.db")
db.execute("INSERT INTO users (name, email) VALUES (?, ?)", ["Alice", "alice@example.com"])
System.print("Inserted user with ID: %(db.lastInsertId)")
db.execute("INSERT INTO users (name, email) VALUES (?, ?)", ["Bob", "bob@example.com"])
db.close()</ code ></ pre >
< h3 > Querying Data</ h3 >
< pre >< code > import "sqlite" for Sqlite
var db = Sqlite.open("app.db")
var users = db.execute("SELECT * FROM users ORDER BY name")
for (user in users) {
System.print("%(user["id"]): %(user["name"]) < %(user["email"])>")
}
var user = db.execute("SELECT * FROM users WHERE id = ?", [1])
if (user.count > 0) {
System.print("Found: %(user[0]["name"])")
}
db.close()</ code ></ pre >
< h3 > Updating Data</ h3 >
< pre >< code > import "sqlite" for Sqlite
var db = Sqlite.open("app.db")
db.execute("UPDATE users SET email = ? WHERE id = ?", ["newemail@example.com", 1])
db.close()</ code ></ pre >
< h3 > Deleting Data</ h3 >
< pre >< code > import "sqlite" for Sqlite
var db = Sqlite.open("app.db")
db.execute("DELETE FROM users WHERE id = ?", [2])
db.close()</ code ></ pre >
< h3 > Transactions</ h3 >
< pre >< code > import "sqlite" for Sqlite
var db = Sqlite.open("app.db")
db.execute("BEGIN TRANSACTION")
var fiber = Fiber.new {
db.execute("INSERT INTO users (name, email) VALUES (?, ?)", ["Charlie", "charlie@example.com"])
db.execute("INSERT INTO users (name, email) VALUES (?, ?)", ["Diana", "diana@example.com"])
}
var error = fiber.try()
if (error) {
db.execute("ROLLBACK")
System.print("Error: %(error)")
} else {
db.execute("COMMIT")
System.print("Transaction committed")
}
db.close()</ code ></ pre >
< div class = "admonition tip" >
< div class = "admonition-title" > Tip</ div >
< p > Always use parameterized queries with < code > ?</ code > placeholders to prevent SQL injection attacks. Never concatenate user input directly into SQL strings.</ p >
</ div >
< div class = "admonition note" >
< div class = "admonition-title" > Note</ div >
< p > Use < code > ":memory:"</ code > as the path for an in-memory database that does not persist to disk.</ p >
</ div >
</ article >
< footer class = "page-footer" >
< a href = "subprocess.html" class = "prev" > subprocess</ a >
< a href = "datetime.html" class = "next" > datetime</ a >
</ footer >
</ main >
</ div >
< script src = "../js/main.js" ></ script >
</ body >
</ html >