PyData Eindhoven 2025

Extending SQL Databases with Python
2025-12-09 , Planck-Bohr

What if your database could run Python code inside SQL? In this talk, we’ll explore how to extend popular databases using Python, without needing to write a line of C.

We’ll cover three systems—SQLite, DuckDB, and PostgreSQL—and show how Python can be used in each to build custom SQL functions, accelerate data workflows, and prototype analytical logic. Each database offers a unique integration path:
- SQLite and DuckDB allow you to register Python functions directly into SQL via sqlite3.create_function, making it easy to inject business logic or custom transformations.
- PostgreSQL offers PL/Python, a full-featured procedural language for writing SQL functions in Python. We’ll also touch on advanced use cases, including embedding the Python interpreter directly into a PostgreSQL extension for deeper integration.

By the end of this talk, you’ll understand the capabilities, limitations, and gotchas of Python-powered extensions in each system—and how to choose the right tool depending on your use case, whether you’re analyzing data, building pipelines, or hacking on your own database.


  1. Introduction (3 min)
    • Who this talk is for: devs, data engineers, extension hackers
    • Motivation: why embed Python in databases?
    • Overview of the 3 systems (SQLite, DuckDB, PostgreSQL)

  2. SQLite & DuckDB: Python Functions via sqlite3.create_function (7 min)
    • How sqlite3.create_function() works in SQLite
    • Example: creating a simple text-processing SQL function in Python
    • Use cases: rapid prototyping, lightweight data pipelines

  3. PostgreSQL with PL/Python (6 min)
    • Enabling and using the PL/Python extension
    • Writing SQL functions in Python
    • Pros and limitations (e.g., sandboxing, permissions, virtualenvs)

  4. Advanced: Embedding Python into PostgreSQL Extensions (7 min)
    • Writing PostgreSQL extensions in C that embed Python
    • Use cases: integrating ML models, custom procedural logic
    • Short demo or diagram: C + Python working inside Postgres

  5. Trade-offs and Comparison (3 min)
    • Performance, deployment, complexity, ecosystem
    • When to use which approach

  6. Q&A (4 min)
    • Invite questions and deeper discussion from the audience


Prior Knowledge Expected: Medium - Basic Understanding (read about it but never used it)

Florents (Flo) Tselai is a data generalist, open-source developer, and PostgreSQL contributor. He has authored multiple database extensions, primarily for PostgreSQL, and also for SQLite and DuckDB.

His work sits at the intersection of database engineering, AI, web crawling, and data journalism - blending research, engineering, and leadership along the way.

He is also the creator of diofanti.org, a civic-tech platform that promotes government transparency and citizen empowerment, enabling people to track public spending and decisions in Greece. https://github.com/Florents-Tselai