asyncpg – asynchroner PostgreSQL-Client für Python

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einleitung

Mit der wachsenden Beliebtheit asynchroner Web-Frameworks wie FastAPI und Starlette steigt auch der Bedarf an schnellen, nicht-blockierenden Methoden für die Datenbank-Interaktion. asyncpg ist ein asynchroner Client für PostgreSQL, der von Grund auf für maximale Leistung entwickelt wurde.

asyncpg bietet eine Low-Level, schnelle und effiziente Möglichkeit, mit PostgreSQL im async/await-Stil zu arbeiten, was es zu einer hervorragenden Wahl für moderne Python-Anwendungen macht. Die Bibliothek ist in Python und Cython geschrieben, was eine hohe Ausführungsgeschwindigkeit und minimale Overhead-Kosten gewährleistet.

Was ist asyncpg

asyncpg ist ein voll funktionsfähiger asynchroner PostgreSQL-Treiber für Python, der eine direkte Interaktion mit der Datenbank ohne ORM ermöglicht. Die Bibliothek unterstützt alle modernen PostgreSQL-Funktionen, einschließlich JSON, UUID, Arrays, benutzerdefinierte Datentypen und erweiterte Funktionen.

Die Hauptvorteile von asyncpg:

  • Vollständige Asynchronität mit asyncio-Unterstützung
  • Hohe Leistung dank Cython
  • Native Unterstützung aller PostgreSQL-Datentypen
  • Integrierte Unterstützung für Verbindungspools
  • Sicherheit vor SQL-Injection
  • Einfache Integration mit asynchronen Frameworks

Installation und erste Einrichtung

Systemanforderungen

Für die Arbeit mit asyncpg werden benötigt:

  • Python 3.7 oder höher
  • PostgreSQL 9.5 oder höher
  • Betriebssystem: Linux, macOS, Windows

Installation der Bibliothek

pip install asyncpg

Für die Entwicklung empfiehlt sich die Installation zusätzlicher Pakete:

pip install asyncpg pytest-asyncio

Basisverbindung zur Datenbank

import asyncpg
import asyncio

async def main():
    # Verbindung mit Parametern
    conn = await asyncpg.connect(
        user='postgres',
        password='secret',
        database='test_db',
        host='127.0.0.1',
        port=5432
    )
    
    # Verbindung prüfen
    version = await conn.fetchval('SELECT version()')
    print(f"Verbunden mit: {version}")
    
    await conn.close()

asyncio.run(main())

Verbindung über DSN

# Verwendung eines Verbindungsstrings
dsn = "postgresql://postgres:secret@127.0.0.1:5432/test_db"
conn = await asyncpg.connect(dsn)

Asynchronität in Python und die Rolle von asyncpg

asyncpg nutzt async/await und ist vollständig kompatibel mit asyncio, was nicht-blockierende Abfragen an PostgreSQL ermöglicht. Dies ist entscheidend für hochlastige Anwendungen und APIs, bei denen eine Blockierung der Event-Loop zu erheblichen Leistungseinbußen führen kann.

Unterschied zu synchronen Treibern

Im Gegensatz zu psycopg2, das synchron ist, blockiert asyncpg nicht die Ausführung anderer Aufgaben:

# Synchroner Ansatz (psycopg2)
import psycopg2
conn = psycopg2.connect(...)  # Blockiert den Thread
cursor = conn.cursor()
cursor.execute("SELECT * FROM users")  # Blockiert den Thread

# Asynchroner Ansatz (asyncpg)
import asyncpg
conn = await asyncpg.connect(...)  # Blockiert die Event-Loop nicht
rows = await conn.fetch("SELECT * FROM users")  # Blockiert die Event-Loop nicht

Gleichzeitige Ausführung von Abfragen

async def concurrent_queries():
    conn = await asyncpg.connect(...)
    
    # Parallele Ausführung mehrerer Abfragen
    tasks = [
        conn.fetch("SELECT * FROM users"),
        conn.fetch("SELECT * FROM orders"),
        conn.fetch("SELECT * FROM products")
    ]
    
    results = await asyncio.gather(*tasks)
    return results

Wichtige Methoden und Funktionen von asyncpg

Tabelle der wichtigsten

Empfehlungen