I know Python; Why learn SQL

I know Python; Why learn SQL

I learned SQL very early in my career. At the time, I didn’t understand why, and for the first month or so, it didn’t make sense to me. The syntax didn’t resemble any language I had seen before, and it employed concepts with which I was unfamiliar. This all made SQL seem scary, and oddly enough, SQL hasn’t changed much in the past 40 years, which makes it even more of an oddity. ...

January 5, 2026 · 2 min · Jamal Hansen
Zero-Setup SQL: Run your first SQL query in under 5 minutes with DuckDB

Zero-Setup SQL: Run your first SQL query in under 5 minutes with DuckDB

Have you ever tried setting up a database server just to learn SQL? Docker containers, admin credentials… Forget all that. Let me show you how to go from zero to running SQL in under 5 minutes. Why are we using DuckDB to learn SQL? No setup - Just import and start using it Real SQL - PostgreSQL compatible syntax so what you learn transfers Fast enough - Handles millions of rows on your laptop Python-native - Works well with lists, DataFrames, CSV files It is perfect for learning without infrastructure headaches. ...

January 10, 2026 · 2 min · Jamal Hansen
Generate Practice Data with faker

Generate Practice Data with faker

Last week, we got DuckDB running with three hardcoded rows. That got us started—but three rows? You can eyeball that. Let’s generate hundreds of realistic customers and build a dataset worth exploring. Python has the perfect tool: faker. It’s a library that generates realistic fake data—names, emails, addresses, dates—anything you’d find in a real database. Let’s use it to build a dataset we can explore for the rest of this series. ...

January 19, 2026 · 4 min · Jamal Hansen
Don't forget to save! Persisting your DuckDB database

Don't forget to save! Persisting your DuckDB database

I still remember losing schoolwork and video game progress because I forgot to save. That sinking feeling when hours of work vanish because you were too caught up in the flow to pause and save. In our last post, we created a customer database and generated 500 rows of fake data. Our in-memory database has the same problem—when Python exits, all that data vanishes: import duckdb con = duckdb.connect(':memory:') con.execute("CREATE TABLE customers (id INT, name VARCHAR)") con.execute("INSERT INTO customers VALUES (1, 'Alice')") print(con.execute("SELECT * FROM customers").fetchdf()) # Script ends... and the data is gone forever A database is supposed to provide persistent storage, isn’t it? Let’s fix that with one small change. ...

January 26, 2026 · 3 min · Jamal Hansen