asyncpg is a database interface library designed specifically for PostgreSQL and asyncio.
Introduction
asyncpg is an efficient implementation of the PostgreSQL binary protocol for Python’s asyncio. It provides fast queries, native protocol features, and convenient primitives for async I/O.
Setup
uv init asyncpg-basiccd asyncpg-basicuv add asyncpgCreate and start a PostgreSQL instance as explained in Postgres - Basic.
Then create a database named test:
create database test;Basic Usage
Create test_database.py:
import asyncioimport asyncpgimport datetime
async def main():
# Establish a connection to an existing database named "test" conn = await asyncpg.connect("postgresql://postgres:password@localhost/test")
try: # Execute a statement to create a new table. await conn.execute( """ create table if not exists users( id serial primary key, name text unique, dob date )""" )
# Insert a record into the created table. await conn.execute( """ insert into users(name, dob) values($1, $2) on conflict(name) do nothing""", "Alice", datetime.date(1980, 25, 1), )
# Select a row from the table. row = await conn.fetchrow("select * from users where name = $1", "Alice") # *row* now contains <Record id=1 name='Alice' dob=datetime.date(1980, 25, 1)> print(row)
finally: # Close the connection. await conn.close()
asyncio.run(main())Run the script and you should see:
<Record id=1 name='Alice' dob=datetime.date(1980, 1, 25)>Notes on parameters and DB-API
- asyncpg uses PostgreSQL’s native parameter placeholders:
$1,$2, … - asyncpg does not implement PEP 249 (DB-API 2.0). It favors PostgreSQL’s native parameterization and avoids query rewriting.