0Pricing
Python Academy · Lektion

Asynchrone Endpunkte und Datenbankintegration

Schreiben Sie asynchrone Routen-Handler und verbinden Sie mit SQLAlchemy eine Datenbank.

Asynchrone Endpunkte und Datenbankintegration ist eine kostenlose Python Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Python Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Python Academy-Kurs umfasst insgesamt 4 Lektionen.

async def-Endpunkte

Deklarieren Sie Routen-Handler mit async def für nicht blockierende E/A. Verwenden Sie def für CPU-intensive oder blockierende Operationen (FastAPI führt sie in einem Thread-Pool aus).

from fastapi import FastAPI
import asyncio
app = FastAPI()

@app.get("/slow")
async def slow():
    await asyncio.sleep(1)   # non-blocking
    return {"done": True}

asyncpg für PostgreSQL

asyncpg ist ein schneller, asynchroner PostgreSQL-Treiber. Verwenden Sie einen Verbindungspool, der von mehreren Anfragen gemeinsam genutzt wird.

# pip install asyncpg
import asyncpg, asyncio

async def main():
    pool = await asyncpg.create_pool("postgresql://user:pass@host/db")
    async with pool.acquire() as conn:
        rows = await conn.fetch("SELECT id, name FROM users")
    await pool.close()
    return rows

Asynchrones SQLAlchemy

SQLAlchemy 1.4+ mit async_sessionmaker stellt ein asynchrones ORM bereit. Verwenden Sie AsyncSession als FastAPI-Abhängigkeit.

# pip install sqlalchemy aiosqlite
from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession, async_sessionmaker

engine = create_async_engine("sqlite+aiosqlite:///db.sqlite")
AsyncSessionLocal = async_sessionmaker(engine, expire_on_commit=False)

async def get_db():
    async with AsyncSessionLocal() as session:
        yield session

Datenbankabhängigkeit

Geben Sie die Sitzung aus einer FastAPI-Abhängigkeit mit yield zurück, damit sie nach der Anfrage festgeschrieben und geschlossen wird.

from fastapi import Depends, FastAPI
from sqlalchemy.ext.asyncio import AsyncSession
app = FastAPI()

async def get_db():
    async with AsyncSessionLocal() as session:
        yield session

@app.get("/users")
async def get_users(db: AsyncSession = Depends(get_db)):
    result = await db.execute(select(User))
    return result.scalars().all()

SQLAlchemy-ORM-Modelle

Definieren Sie ORM-Modelle mit DeclarativeBase und ordnen Sie sie Datenbanktabellen zu.

from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column

class Base(DeclarativeBase): pass

class User(Base):
    __tablename__ = "users"

    id:    Mapped[int] = mapped_column(primary_key=True)
    name:  Mapped[str]
    email: Mapped[str]

CRUD-Operationen

Implementieren Sie grundlegende Create-, Read-, Update- und Delete-Operationen mit den asynchronen Sitzungmethoden von SQLAlchemy.

from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession

async def create_user(db: AsyncSession, name: str, email: str):
    user = User(name=name, email=email)
    db.add(user)
    await db.commit()
    await db.refresh(user)
    return user

async def get_user(db: AsyncSession, user_id: int):
    result = await db.execute(select(User).where(User.id == user_id))
    return result.scalar_one_or_none()

Alembic für Migrationen

Verwenden Sie Alembic, um Datenbankschema-Migrationen versionskontrolliert zu verwalten.

# pip install alembic
# alembic init alembic
# Edit alembic/env.py to point to your models

# Generate a migration:
# alembic revision --autogenerate -m "add users table"

# Apply:
# alembic upgrade head

httpx für asynchrone HTTP-Aufrufe

Verwenden Sie httpx.AsyncClient, um aus asynchronen FastAPI-Endpunkten externe APIs aufzurufen.

# pip install httpx
import httpx
from fastapi import FastAPI
app = FastAPI()

@app.get("/weather")
async def weather(city: str):
    async with httpx.AsyncClient() as client:
        r = await client.get(f"https://wttr.in/{city}?format=j1")
        return r.json()

Hintergrundaufgaben

Verwenden Sie BackgroundTasks, um Aufgaben nach dem Senden der Antwort auszuführen – zum Beispiel eine E-Mail zu senden oder einen Cache zu aktualisieren.

from fastapi import FastAPI, BackgroundTasks
app = FastAPI()

def send_welcome_email(email: str):
    # blocking I/O — runs in background thread
    smtp_send(email, "Welcome!")

@app.post("/register")
def register(email: str, bg: BackgroundTasks):
    create_user(email)
    bg.add_task(send_welcome_email, email)
    return {"status": "registered"}

Lifespan-Ereignisse

Verwenden Sie den lifespan-Kontextmanager (FastAPI 0.93+), um Startup- und Shutdown-Code auszuführen – zum Beispiel den Datenbankpool zu erstellen.

from contextlib import asynccontextmanager
from fastapi import FastAPI

@asynccontextmanager
async def lifespan(app: FastAPI):
    app.state.pool = await asyncpg.create_pool(DSN)
    yield
    await app.state.pool.close()

app = FastAPI(lifespan=lifespan)

FastAPI mit httpx testen

Verwenden Sie httpx.AsyncClient mit ASGITransport, um FastAPI-Endpunkte zu testen, ohne einen Server zu starten.

import pytest, httpx
from fastapi import FastAPI
app = FastAPI()

@app.get("/ping")
async def ping(): return {"pong": True}

@pytest.mark.asyncio
async def test_ping():
    async with httpx.AsyncClient(
        transport=httpx.ASGITransport(app=app),
        base_url="http://test"
    ) as client:
        r = await client.get("/ping")
    assert r.json() == {"pong": True}

Schnelltest

Wann sollten Sie async def und wann def für einen FastAPI-Routen-Handler verwenden?

Zusammenfassung

Verwenden Sie async def-Endpunkte mit asynchronen Datenbanktreibern (asyncpg, SQLAlchemy async). Verwalten Sie die Datenbanksitzung als FastAPI-Abhängigkeit. Verwenden Sie BackgroundTasks für Aufgaben nach dem Senden der Antwort und den lifespan-Kontextmanager für Startup und Shutdown.

Häufig gestellte Fragen

Ist die Lektion „Asynchrone Endpunkte und Datenbankintegration“ kostenlos?

Ja — der vollständige Text von „Asynchrone Endpunkte und Datenbankintegration“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Python Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Python Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Asynchrone Endpunkte und Datenbankintegration“?

Schreiben Sie asynchrone Routen-Handler und verbinden Sie mit SQLAlchemy eine Datenbank. Du übst Python Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Python Academy zu starten?

Keine Vorkenntnisse erforderlich. Python Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.

Wie lange dauert die Lektion „Asynchrone Endpunkte und Datenbankintegration“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Python Academy-Lektion Code schreiben und ausführen?

Ja. Jede Python Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. FastAPI-Projekteinrichtung und erster Endpunkt
  2. Pfadparameter, Query-Parameter und Request-Bodies
  3. Dependency Injection und Authentifizierung
  4. Asynchrone Endpunkte und Datenbankintegration
← Zurück zu Python Academy