Quick Start
Default Engine: DuckDB
By default,mo.sql() uses DuckDB, a fast in-process SQL database:
Supported Databases
marimo supports multiple database engines:DuckDB
Default engine
In-process OLAP database
In-process OLAP database
SQLAlchemy
Universal SQL toolkit
PostgreSQL, MySQL, SQLite, etc.
PostgreSQL, MySQL, SQLite, etc.
Ibis
Python DataFrames
Unified API for 20+ backends
Unified API for 20+ backends
Clickhouse
OLAP database
High-performance analytics
High-performance analytics
Redshift
AWS data warehouse
Cloud data warehousing
Cloud data warehousing
DB-API 2.0
Standard interface
Any PEP 249 connection
Any PEP 249 connection
Custom Database Connections
SQLAlchemy
Ibis
DuckDB with Persistence
Clickhouse
Query Features
Referencing DataFrames
DuckDB can query any DataFrame in scope:Reading Files
DuckDB can read various file formats directly:Remote Files
Output Control
Disable Output Display
Output Format
Control the returned DataFrame type via config:The output format is configured in marimo settings under SQL → Output type.
Options:
auto, polars, lazy-polars, pandasResult Limits
Limit large query results automatically:EXPLAIN Queries
Analyze query execution plans:EXPLAIN output preserves box-drawing characters for readable query plans.
Advanced Features
Lazy Evaluation
For large datasets, use lazy evaluation:DuckDB Extensions
Load DuckDB extensions for additional functionality:Common Table Expressions (CTEs)
Window Functions
Database Catalog
marimo can discover database schemas, tables, and columns automatically for autocomplete and exploration.Available Databases
View connected databases in the datasources panel:- Automatically detects database connections in scope
- Shows schemas and tables
- Provides column information
Autocomplete
When typing SQL queries, marimo provides intelligent autocomplete for:- Table names
- Column names
- SQL keywords
- Functions
Best Practices
1
Use parameterization
Avoid SQL injection by using f-strings carefully, or use parameterized queries with SQLAlchemy.
2
Limit large results
Set
MARIMO_SQL_DEFAULT_LIMIT or use LIMIT clauses to prevent loading huge datasets.3
Index your data
For repeated queries on the same data, use DuckDB persistent databases with indexes.
4
Choose the right engine
- DuckDB: Fast analytics on local/cloud files
- SQLAlchemy: OLTP databases (PostgreSQL, MySQL)
- Ibis: Unified API across multiple backends