Endpoint Asinkron dan Integrasi Database
Tulis handler rute asinkron dan hubungkan ke database dengan SQLAlchemy.
Endpoint Asinkron dan Integrasi Database adalah pelajaran Python Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Python Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Python Academy mencakup 4 pelajaran total.
Endpoint dengan async def
Deklarasikan penangan rute dengan async def untuk I/O yang tidak memblokir. Gunakan def untuk operasi yang terikat CPU atau memblokir (FastAPI menjalankannya dalam kumpulan thread).
from fastapi import FastAPI
import asyncio
app = FastAPI()
@app.get("/slow")
async def slow():
await asyncio.sleep(1) # non-blocking
return {"done": True}asyncpg untuk PostgreSQL
asyncpg adalah driver PostgreSQL asinkron yang cepat. Gunakan kumpulan koneksi yang digunakan bersama oleh berbagai permintaan.
# 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 rowsSQLAlchemy Asinkron
SQLAlchemy 1.4+ dengan async_sessionmaker menyediakan ORM asinkron. Gunakan AsyncSession sebagai dependensi FastAPI.
# 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 sessionDependensi Basis Data
Gunakan yield untuk mengembalikan sesi dari dependensi FastAPI agar sesi tersebut di-commit dan ditutup setelah permintaan selesai.
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()Model ORM SQLAlchemy
Definisikan model ORM dengan DeclarativeBase dan petakan model tersebut ke tabel basis data.
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]Operasi CRUD
Implementasikan operasi dasar Create, Read, Update, Delete menggunakan metode sesi asinkron 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 untuk Migrasi
Gunakan Alembic untuk mengelola migrasi skema basis data dengan cara yang dikendalikan versi.
# 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 headhttpx untuk Panggilan HTTP Asinkron
Gunakan httpx.AsyncClient untuk memanggil API eksternal dari endpoint FastAPI asinkron.
# 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()Tugas Latar Belakang
Gunakan BackgroundTasks untuk menjalankan pekerjaan setelah respons dikirim — misalnya mengirim email atau memperbarui cache.
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"}Peristiwa Siklus Hidup
Gunakan pengelola konteks lifespan (FastAPI 0.93+) untuk menjalankan kode saat startup atau shutdown — misalnya membuat kumpulan koneksi basis data.
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)Menguji FastAPI dengan httpx
Gunakan httpx.AsyncClient dengan ASGITransport untuk menguji endpoint FastAPI tanpa menjalankan server.
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}Pemeriksaan Singkat
Kapan Anda sebaiknya menggunakan async def dibandingkan def untuk penangan rute FastAPI?
Ringkasan
Gunakan endpoint async def dengan driver basis data asinkron (asyncpg, SQLAlchemy asinkron). Kelola sesi basis data sebagai dependensi FastAPI. Gunakan BackgroundTasks untuk pekerjaan setelah respons dan pengelola konteks lifespan untuk startup atau shutdown.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Endpoint Asinkron dan Integrasi Database” gratis?
Ya — teks lengkap “Endpoint Asinkron dan Integrasi Database” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Python Academy, upgrade ke CoddyKit PRO. Kursus Python Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Endpoint Asinkron dan Integrasi Database”?
Tulis handler rute asinkron dan hubungkan ke database dengan SQLAlchemy. Kamu berlatih Python Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Python Academy?
Tidak diperlukan pengalaman sebelumnya. Python Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Endpoint Asinkron dan Integrasi Database” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Python Academy ini?
Ya. Setiap pelajaran Python Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Penyiapan Proyek FastAPI dan Endpoint Pertama
- Parameter Jalur, Parameter Kueri, dan Body Permintaan
- Injeksi Dependensi dan Autentikasi
- Endpoint Asinkron dan Integrasi Database