Building data-driven components and applications doesn't have to be so ducking hardWasm SDK

Back to Table of Contents

This is a summary of a book chapter from DuckDB in Action, published by Manning. Download the complete book for free to read the complete chapter.

Chapter 6: Integrating with the Python Ecosystem

DuckDB's Python API and DB-API 2.0

DuckDB’s Python API extends beyond merely implementing the Python DB-API 2.0 by enabling queries on Python objects as if they were tables and allowing easy conversion of query results into DataFrames. This seamless integration helps bridge the gap between relational databases and Python data structures, making it a preferred choice for Python-centric projects.

Installing the Python Package

To get started with DuckDB in Python, install the DuckDB package using pip install duckdb and import it in your Python environment. This straightforward process is essential for leveraging DuckDB's capabilities within the Python ecosystem.

Opening a Database Connection

DuckDB operates as an embedded database within your Python process, allowing interaction with an in-memory database without the need for a dedicated connection object. However, you can still open specific connections to in-memory databases or database files for more controlled usage.

Using the Relational API

DuckDB’s relational API allows querying tables, views, and functions as relations. Relations are a generalized version of tables composed of tuples and attributes, making it possible to treat various Python objects as queryable entities, thus blurring the lines between relational databases and in-memory objects.

Ingesting CSV Data with the Python API

Using DuckDB’s read_csv function in the Python API, you can seamlessly ingest CSV data and treat the resulting object as a queryable relation. This approach integrates well with Python workflows and allows for efficient data manipulation directly within Python code.

Composing Queries

DuckDB’s relational API provides methods like filter, project, limit, aggregate, and order for composing queries. This builder-style API offers a programmatic way to construct queries, reducing the risk of SQL injection and improving readability and maintainability of the code.

Querying pandas DataFrames

DuckDB allows direct querying of pandas DataFrames, treating them as if they were tables in a SQL database. This integration provides flexibility and power, enabling complex data operations within the familiar environment of pandas.

User-Defined Functions

DuckDB supports creating User-Defined Functions (UDFs) within its Python package, allowing users to extend SQL functionality with custom Python functions. This feature integrates Python’s extensive library ecosystem into DuckDB, enhancing its flexibility and capability for tailored data analysis.

Interoperability with Apache Arrow and Polars

DuckDB’s interoperability extends to Apache Arrow and Polars, enabling seamless transitions between different data formats. This compatibility allows efficient data manipulation and integration with other tools, ensuring flexibility and performance in data analysis workflows.


DuckDB’s Python API blurs the lines between tables and in-memory objects, enabling uniform querying of various data sources. The relational API aids in writing maintainable applications, and UDFs expand functionality by integrating Python libraries. Data can be exported to formats like pandas and Polars DataFrames, facilitating smooth transitions between platforms.