asyncpg – client PostgreSQL asynchrone

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction

Avec la popularité croissante des frameworks web asynchrones comme FastAPI et Starlette, le besoin de méthodes rapides et non bloquantes pour interagir avec la base de données augmente. asyncpg est un client asynchrone pour PostgreSQL, conçu dès le départ pour des performances maximales.

asyncpg est un moyen bas niveau, rapide et efficace de travailler avec PostgreSQL dans un style async/await, ce qui en fait un excellent choix pour les applications Python modernes. La bibliothèque est écrite en Python et Cython, garantissant une vitesse d'exécution élevée et une surcharge minimale.

Qu'est-ce qu'asyncpg

asyncpg est un pilote PostgreSQL asynchrone complet pour Python, offrant une interaction directe avec la base de données sans utiliser d'ORM. La bibliothèque prend en charge toutes les fonctionnalités modernes de PostgreSQL, notamment JSON, UUID, les tableaux, les types de données personnalisés et les fonctions avancées.

Les principaux avantages d'asyncpg :

  • Asynchronisme complet avec prise en charge d'asyncio
  • Haute performance grâce à l'utilisation de Cython
  • Prise en charge native de tous les types de données PostgreSQL
  • Prise en charge intégrée du pool de connexions
  • Sécurité contre les injections SQL
  • Intégration simple avec les frameworks asynchrones

Installation et configuration initiale

Prérequis système

Pour utiliser asyncpg, vous avez besoin de :

  • Python 3.7 ou supérieur
  • PostgreSQL 9.5 ou supérieur
  • Système d'exploitation : Linux, macOS, Windows

Installation de la bibliothèque

pip install asyncpg

Pour le développement, il est recommandé d'installer des paquets supplémentaires :

pip install asyncpg pytest-asyncio

Connexion de base à la base de données

import asyncpg
import asyncio

async def main():
    # Connexion avec paramètres
    conn = await asyncpg.connect(
        user='postgres',
        password='secret',
        database='test_db',
        host='127.0.0.1',
        port=5432
    )
    
    # Vérification de la connexion
    version = await conn.fetchval('SELECT version()')
    print(f"Connecté à : {version}")
    
    await conn.close()

asyncio.run(main())

Connexion via DSN

# Utilisation d'une chaîne de connexion
dsn = "postgresql://postgres:secret@127.0.0.1:5432/test_db"
conn = await asyncpg.connect(dsn)

Asynchronisme en Python et rôle d'asyncpg

asyncpg utilise async/await et est entièrement compatible avec asyncio, permettant d'exécuter des requêtes non bloquantes vers PostgreSQL. C'est crucial pour les applications et API à forte charge, où le blocage de la boucle d'événements peut entraîner une baisse significative des performances.

Différence avec les pilotes synchrones

Contrairement à psycopg2, qui est synchrone, asyncpg ne bloque pas l'exécution d'autres tâches :

# Approche synchrone (psycopg2)
import psycopg2
conn = psycopg2.connect(...)  # Bloque le thread
cursor = conn.cursor()
cursor.execute("SELECT * FROM users")  # Bloque le thread

# Approche asynchrone (asyncpg)
import asyncpg
conn = await asyncpg.connect(...)  # Ne bloque pas la boucle d'événements
rows = await conn.fetch("SELECT * FROM users")  # Ne bloque pas la boucle d'événements

Exécution concurrente des requêtes

async def concurrent_queries():
    conn = await asyncpg.connect(...)
    
    # Exécution de plusieurs requêtes en parallèle
    tasks = [
        conn.fetch("SELECT * FROM users"),
        conn.fetch("SELECT * FROM orders"),
        conn.fetch("SELECT * FROM products")
    ]
    
    results = await asyncio.gather(*tasks)
    return results

Méthodes et fonctions principales d'asyncpg

Tableau des principales mé

Recommendations