marimo-Notebooks
marimo ist ein Open-Source-reaktives Notebook für Python und SQL, das eng mit dem Python-Client von DuckDB integriert ist und es Ihnen ermöglicht, Python und SQL in einem einzigen, git-versionierbaren Notebook zu mischen. Anders als bei klassischen Notebooks führt marimo beim Ausführen einer Zelle oder bei der Interaktion mit einem UI-Element betroffene Zellen automatisch (oder verzögert) erneut aus und hält so Code und Ausgaben konsistent. Die Integration mit DuckDB eignet sich gut für die interaktive Arbeit mit Daten, und die Darstellung als Python-Datei macht es einfach, Notebooks als Skripte auszuführen.
Installation
Installieren Sie marimo und DuckDB zunächst in Ihrem Terminal:
pip install "marimo[sql]" # or uv add "marimo[sql]"Unterstützende Bibliotheken installieren:
pip install "polars[pyarrow]" # or uv add "polars[pyarrow]"Ein Tutorial starten:
marimo tutorial sqlSQL in marimo
Erstellen Sie ein Notebook in Ihrem Terminal mit marimo edit notebook.py. SQL-Zellen
können Sie auf eine von drei Arten anlegen:
- Rechtsklick auf die Schaltfläche + und SQL cell wählen
- Jede leere Zelle über das Zellenmenü in SQL umwandeln
- Die SQL-Schaltfläche am unteren Rand des Notebooks anklicken
In marimo wirken SQL-Zellen wie reines SQL, werden aber als gewöhnlicher Python-Code mit der Funktion mo.sql() serialisiert. So bleibt Ihr Notebook reiner Python-Code, ohne spezielle Syntax oder Magic-Befehle.
df = mo.sql(f"SELECT 'Off and flying!' AS a_duckdb_column")Das liegt daran, dass marimo Notebooks als reines Python speichert, aus mehreren Gründen, etwa git-freundliche Diffs und das Ausführen von Notebooks als Python-Skripte.
Die SQL-Anweisung selbst ist ein f-String, sodass Sie Python-Werte mit {} in die Abfrage einsetzen können (siehe weiter unten). Insbesondere können Ihre SQL-Abfragen von den Werten von UI-Elementen oder anderen Python-Werten abhängen – alles Teil des Datenflussgraphen von marimo.
Warnung Achtung! Wenn benutzergenerierte Inhalte in die SQL-Abfragen gelangen, müssen Sie Ihre Eingaben bereinigen, um SQL-Injection zu verhindern.
Eine eigene DuckDB-Verbindung herstellen
Um statt der globalen Standardverbindung eine eigene DuckDB-Verbindung zu verwenden, legen Sie eine Zelle an und erzeugen Sie eine DuckDB-Verbindung als Python-Variable:
import duckdb
# Create a DuckDB connectionconn = duckdb.connect("path/to/my/duckdb.db")marimo erkennt die Verbindung automatisch und lässt Sie sie im Verbindungs-Dropdown der SQL-Zelle auswählen.
Automatische Erkennung von Datenbank, Schema und Tabelle
marimo untersucht Verbindungen und zeigt Datenbank, Schemas, Tabellen und Spalten im Bereich Data Sources an. In diesem Bereich können Sie Ihre Schemas schnell durchsuchen und Tabellen sowie Spalten in Ihre SQL-Abfragen übernehmen.
Ein lokales DataFrame referenzieren
Referenzieren Sie ein lokales DataFrame in Ihrer SQL-Zelle über den Namen der Python-Variable, die das DataFrame enthält. Wenn Ihre Datenbankverbindung eine Tabelle gleichen Namens hat, wird stattdessen die Datenbanktabelle verwendet.
import polars as pldf = pl.DataFrame({"column": [1, 2, 3]})SELECT * FROM df WHERE column > 2Die Ausgabe einer SQL-Zelle referenzieren
Wenn Sie in der SQL-Zelle eine nicht-private (nicht unterstrichene) Ausgabevariable definieren, können Sie das resultierende DataFrame in anderen Python- und SQL-Zellen referenzieren.
Reaktive SQL-Zellen
marimo ermöglicht reaktive SQL-Zellen, die sich automatisch aktualisieren, wenn sich ihre Abhängigkeiten ändern. Arbeiten Sie mit teuren Abfragen oder großen Datensätzen? Sie können die Laufzeit von marimo auf „lazy“ stellen. Dann werden abhängige Zellen nur als veraltet markiert, und Sie entscheiden, wann sie erneut ausgeführt werden.
digits = mo.ui.slider(label="Digits", start=100, stop=10000, step=200)digitsCREATE TABLE random_data AS SELECT i AS id, random() AS random_value, FROM range({digits.value}) AS t(i);
SELECT * FROM random_data;Die Interaktion mit UI-Elementen wie einem Schieberegler macht Ihre Daten greifbarer.
DuckDB-gestützte OLAP-Analysen in marimo
marimo bietet mehrere Funktionen, die gut mit DuckDB in analytischen Workflows zusammenarbeiten:
- Nahtlose Integration zwischen Python und SQL
- Reaktive Ausführung, die abhängige Zellen automatisch aktualisiert, wenn sich Abfragen ändern
- Interaktive UI-Elemente, mit denen sich SQL-Abfragen parametrisieren lassen
- Möglichkeit, Notebooks als eigenständige Anwendungen oder Python-Skripte zu exportieren oder sogar vollständig im Browser mit WebAssembly auszuführen.
Nächste Schritte
- Lesen Sie die marimo-Dokumentation.
- Probieren Sie das SQL-Tutorial:
marimo tutorial sql{:.language-sql .highlight}. - Der Code zu diesem Leitfaden ist auf GitHub verfügbar. Führen Sie ihn mit
marimo edit ⟨github_url⟩{:.language-sql .highlight} aus.