Title slide: Go Hybrid, Find the Results LIKE Can't
1 min read

Go Hybrid: Find the Results LIKE Can't

Companion page for my PyOhio 2026 talk. Slides, code, and the dog-spa dataset for searching free text beyond LIKE with BM25, vectors, and hybrid.

A solitary figure stands on a cliff edge overlooking a vast, hazy canyon at sunrise or sunset.
6 min readSQL for Python Developers

Congratulations! What You Can Do Now

Celebrate your new skills with take-home challenges and resources for continued learning. You think in sets now.

A rustic wooden table displays a meal with roasted meats, rice, and various dishes.
6 min readSQL for Python Developers

Advanced SQL Topics Sampler

Quick tastes of CASE statements, JSON functions, date manipulation, set operations, and recursive CTEs. Enough to know what to learn next.

Bartbot at desk looking irritated
5 min readI Vibe Coded and Lived to Tell

The Makefile was Lying to Me

Gemini saw a wall of green checkmarks and declared 27 tools verified. The Makefile printed FAIL and exited 0. How we made it loud, annoying and honest.

A hand uses a pencil to mark a detailed checklist on a clipboard, resting on a desk.
6 min readSQL for Python Developers

Testing SQL Code

Test queries like Python code using in-memory databases, fixtures, and pytest. Fresh data per test, no state leakage.

A split dirt path cuts through dense, green woods.
8 min readSQL for Python Developers

ORM vs Raw SQL: Decision Framework

It's not either/or. Use ORMs for CRUD and migrations; use raw SQL for analytics and complex queries. A practical decision guide.

Shattered glass frames a blurry, overcast outdoor landscape.
7 min readSQL for Python Developers

Parameterized Queries & Security

String formatting in SQL is dangerous. Learn parameterized queries to keep user input safe and prevent SQL injection attacks.

A dark screen displaying the text "LOADING..." above a white, rectangular progress bar.
7 min readSQL for Python Developers

Python + DuckDB: Real ETL Patterns

Build a complete pipeline - fetch from an API, load into DuckDB, transform with SQL, export results. A capstone putting it all together.

A weathered, rusty warning sign reading "DANGER KEEP OUT" hangs on a chain-link fence.
8 min readSQL for Python Developers

Modifying Data Safely

INSERT, UPDATE, and DELETE with guardrails. Always use WHERE, test with SELECT first, and use transactions to undo mistakes.