Asenkron Uç Noktalar ve Veritabanı Entegrasyonu
Asenkron yönlendirme işleyicileri yazın ve SQLAlchemy ile bir veritabanına bağlanın.
Asenkron Uç Noktalar ve Veritabanı Entegrasyonu, CoddyKit'te ücretsiz bir Python Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Python Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Python Academy kursu toplamda 4 dersten oluşur.
async def Uç Noktaları
Engellenmeyen G/Ç işlemleri için rota işleyicilerini async def ile tanımlayın. CPU'ya bağlı veya engelleyici işlemler için def kullanın (FastAPI bunları bir iş parçacığı havuzunda çalıştırır).
from fastapi import FastAPI
import asyncio
app = FastAPI()
@app.get("/slow")
async def slow():
await asyncio.sleep(1) # non-blocking
return {"done": True}PostgreSQL için asyncpg
asyncpg, hızlı ve asenkron bir PostgreSQL sürücüsüdür. İstekler arasında paylaşılan bir bağlantı havuzu kullanın.
# 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 rowsAsenkron SQLAlchemy
SQLAlchemy 1.4+ ile async_sessionmaker, asenkron bir ORM sağlar. AsyncSession nesnesini FastAPI bağımlılığı olarak kullanın.
# 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 sessionVeritabanı Bağımlılığı
Oturumu bir FastAPI bağımlılığından yield ile döndürün; böylece istekten sonra kaydedilip kapatılır.
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 Modelleri
ORM modellerini DeclarativeBase ile tanımlayın ve bunları veritabanı tablolarıyla eşleyin.
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 İşlemleri
SQLAlchemy asenkron oturum yöntemlerini kullanarak temel Oluşturma, Okuma, Güncelleme ve Silme işlemlerini uygulayın.
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()Geçişler için Alembic
Veritabanı şeması geçişlerini sürüm denetimli bir şekilde yönetmek için Alembic kullanın.
# 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 headAsenkron HTTP Çağrıları için httpx
Asenkron FastAPI uç noktalarından harici API'leri çağırmak için httpx.AsyncClient kullanın.
# 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()Arka Plan Görevleri
Yanıt gönderildikten sonra çalıştırılacak işleri (örneğin e-posta gönderme veya önbelleği güncelleme) yürütmek için BackgroundTasks kullanın.
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"}Yaşam Döngüsü Olayları
Başlangıç ve kapanış kodunu çalıştırmak (örneğin veritabanı havuzu oluşturmak) için lifespan bağlam yöneticisini (FastAPI 0.93+) kullanın.
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'yi httpx ile Test Etme
Sunucu çalıştırmadan FastAPI uç noktalarını test etmek için ASGITransport ile birlikte httpx.AsyncClient kullanın.
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}Hızlı Kontrol
FastAPI rota işleyicisi için async def ile def seçeneklerini ne zaman kullanmalısınız?
Özet
Asenkron veritabanı sürücüleriyle (asyncpg, SQLAlchemy async) async def uç noktaları kullanın. Veritabanı oturumunu FastAPI bağımlılığı olarak yönetin. Yanıt sonrasında yapılacak işler için BackgroundTasks, başlangıç ve kapanış işlemleri için lifespan bağlam yöneticisini kullanın.
Sıkça Sorulan Sorular
“Asenkron Uç Noktalar ve Veritabanı Entegrasyonu” dersi ücretsiz mi?
Evet — “Asenkron Uç Noktalar ve Veritabanı Entegrasyonu” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Python Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Python Academy kursu toplamda 4 dersten oluşur.
“Asenkron Uç Noktalar ve Veritabanı Entegrasyonu” dersinde ne öğreneceğim?
Asenkron yönlendirme işleyicileri yazın ve SQLAlchemy ile bir veritabanına bağlanın. Python Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Python Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Python Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Asenkron Uç Noktalar ve Veritabanı Entegrasyonu” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Python Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Python Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- FastAPI Proje Kurulumu ve İlk Uç Nokta
- Yol Parametreleri, Sorgu Parametreleri ve İstek Gövdeleri
- Bağımlılık Enjeksiyonu ve Kimlik Doğrulama
- Asenkron Uç Noktalar ve Veritabanı Entegrasyonu