GitPedia

Pydapper

A micro ORM for the python dbapi spec inspired by the Nuget package Dapper

From zschumacher·Updated May 19, 2026·View on GitHub·

A pure python library inspired by the NuGet library [dapper](https://dapper-tutorial.net). The project is written primarily in Python, distributed under the MIT License license, first published in 2022. Key topics include: asyncio, dapper, dapper-dot-net, database, google-bigquery.

Latest release: 0.13.1v0.13.1
April 13, 2026View Changelog →

PyPI version
Documentation Status
codecov
License: MIT
Code style: black
Imports: isort
PyPI - Python Version

pydapper

A pure python library inspired by the NuGet library dapper.

pydapper is built on top of the dbapi 2.0 spec
to provide more convenient methods for working with databases in python, with both sync
and async dbapi support.


Help

See the documentation for more details and examples for configuring all
of the connectors pydapper supports.


Installation

It is recommended to only install the database apis you need for your use case. Example below is for psycopg2!

pip

console
pip install pydapper[psycopg2]

poetry

console
poetry add pydapper -E psycopg2

Supported drivers

The database support docs
go into further detail about how to connect to the different drivers pydapper supports.

In addition to psycopg2, pydapper also supports.

Sync dbapis

  • pymssql
  • mysql-connector-python
  • oracledb
  • google-cloud-bigquery
  • sqlite3
  • psycopg

Async dbapis

  • aiopg
  • psycopg

Never write this again...

python
from psycopg2 import connect @dataclass class Task: id: int description: str due_date: datetime.date with connect("postgresql://pydapper:pydapper@localhost/pydapper") as conn: with conn.cursor() as cursor: cursor.execute("select id, description, due_date from task") headers = [i[0] for i in cursor.description] data = cursor.fetchall() list_data = [Task(**dict(zip(headers, row))) for row in data]

Instead, write...

python
from dataclasses import dataclass import datetime import pydapper @dataclass class Task: id: int description: str due_date: datetime.date with pydapper.connect("postgresql+psycopg2://pydapper:pydapper@locahost/pydapper") as commands: tasks = commands.query("select id, description, due_date from task;", model=Task)

(This script is complete, it should run "as is")

Buy me a coffee

If you find this project useful, consider buying me a coffee!

<a href="https://www.buymeacoffee.com/zachschumacher" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/default-orange.png" alt="Buy Me A Coffee" height="41" width="174"></a>

Contributors

Showing top 8 contributors by commit count.

View all contributors on GitHub →

This article is auto-generated from zschumacher/pydapper via the GitHub API.Last fetched: 6/19/2026