Database Integration
Querying databases with Framework helpers
Overview
Once your connections are defined (see the Connections guide), Framework makes it easy to run database queries, execute statements, and tap into the internal framework.db. Use the high-level helpers to avoid hand-managing DBI connections.
Running Queries
Get Data
# Query and return results
users <- db_query("SELECT * FROM users WHERE active = true", "analytics")
Execute Statements
# Execute without returning data
db_execute("UPDATE stats SET last_run = NOW()", "analytics")
Manual Connections
Need direct DBI access? Grab a connection and clean up afterward:
conn <- db_connect("analytics")
DBI::dbListTables(conn)
DBI::dbDisconnect(conn)
Prefer db_query() and db_execute() when possible—they open and close connections automatically.
Supported Databases
Framework supports the following database drivers out of the box:
| Driver | Package | Use Case |
|---|---|---|
postgres / postgresql |
RPostgres | PostgreSQL databases |
sqlite |
RSQLite | Local SQLite files |
duckdb |
duckdb | Analytical workloads, Parquet files |
mysql / mariadb |
RMariaDB | MySQL/MariaDB |
sqlserver / mssql |
odbc | SQL Server |
Object storage connectors (S3-compatible endpoints) are covered in the Connections guide.
DuckDB Configuration
DuckDB supports additional options in settings.yml:
connections:
warehouse:
driver: duckdb
database: data/warehouse.duckdb
read_only: false
memory_limit: "4GB"
threads: 4
The Framework Database
Every project includes a local SQLite database (framework.db) for internal tracking:
cache_entries <- db_query("SELECT * FROM cache", "framework")
This tracks:
- Data integrity hashes
- Cache metadata
- Results registry
Use regular SQL to inspect or export these tables, just like any other connection.