0Pricing
FastAPI Backend Development Bootcamp · Ders

Eşzamansız Veritabanı Erişimi

Engelleme yapmayan veritabanı işlemleri için `asyncpg` ve `SQLModel` gibi eşzamansız veritabanı sürücülerini ve ORM'leri keşfedin.

Eşzamansız Veritabanı Erişimi, CoddyKit'te ücretsiz bir FastAPI Backend Development Bootcamp dersidir. Bu, 4 dersinin 2. 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, FastAPI Backend Development Bootcamp öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. FastAPI Backend Development Bootcamp kursu toplamda 4 dersten oluşur.

Why Async DB Access?

Özellikle FastAPI gibi çerçevelerle yüksek performanslı web uygulamaları oluştururken, veritabanı işlemleri genellikle bir darboğaz haline gelebilir. Geleneksel veritabanı çağrıları "engelleyicidir" (blocking), yani uygulamanız bir sonraki işleme geçmeden önce veritabanının yanıt vermesini bekler.

Asenkron veritabanı erişimi, uygulamanızın veritabanını beklerken diğer görevleri yerine getirmesine olanak tanıyarak API'nizin yoğun yük altında yanıt vermez hale gelmesini önler. Bu, ölçeklenebilirlik için çok önemlidir!

Sync vs. Async DB Calls

Tek bir şefin her şeyle ilgilendiği bir restoran hayal edin. Bir müşteri karmaşık bir yemek (bir veritabanı sorgusu) sipariş ettiğinde, şef o yemek bitene kadar diğer tüm işleri durdurur. Bu, senkron G/Ç'dir.

Asenkron bir düzende ise şef karmaşık yemeği başlatır, ardından karmaşık yemek arka planda pişerken hemen daha basit yemekleri hazırlamaya veya yeni siparişler almaya geçer. Karmaşık yemek hazır olduğunda şef onu alır. Bu engellemeyen yaklaşım verimliliği artırır!

Meet asyncpg: The Async Driver

PostgreSQL için Python'daki tercih edilen eşzamansız (asynchronous) sürücü asyncpg'dir. Python'ın asyncio çatısı ile çalışmak üzere özel olarak tasarlanmış, yüksek performanslı bir kütüphanedir.

  • Hızlı: Hız için kısmen C ile yazılmıştır.
  • Eşzamansız: Tamamen engelleyici değildir (non-blocking).
  • Doğrudan: PostgreSQL'e doğrudan bir arayüz sağlar.

Genellikle eşzamansız ORM'lerin temel sürücüsü olarak veya hassas kontrole ihtiyaç duyduğunuz durumlarda kullanılır.

asyncpg in Action

asyncpg kullanarak bir PostgreSQL veritabanına bağlanmanın ve basit bir sorgu çalıştırmanın temel bir örneğine bakalım. Yer tutucu kimlik bilgilerini kendi bilgilerinizle değiştirmeyi unutmayın!

import asyncio
import asyncpg

async def main():
    conn = None
    try:
        conn = await asyncpg.connect(user='postgres', password='mysecretpassword',
                                     database='testdb', host='localhost')
        print("Connected to PostgreSQL!")
        
        # Execute a query
        result = await conn.fetchval('SELECT 1 + 1')
        print(f"Query result: {result}") # Should be 2
        
    except Exception as e:
        print(f"Error: {e}")
    finally:
        if conn:
            await conn.close()
            print("Connection closed.")

if __name__ == "__main__":
    asyncio.run(main())

Awaiting Database Calls

Bir önceki örnekte, asyncpg.connect() ve conn.fetchval() ifadelerinden önce await anahtar sözcüğünü gördünüz. Bu, asenkron işlemler için çok önemlidir.

  • await, Python'a şunu söyler: "Bu işlem zaman alabilir, bu yüzden burada durakla ve bu sırada diğer görevlerin çalışmasına izin ver."
  • Veritabanı işlemi tamamlandığında, görev kaldığı yerden devam eder.
  • Bu bloklamayan bekleme süreci, FastAPI uygulamanızı ölçeklenebilir kılan şeydir.

SQLModel: Async ORM Power

asyncpg size düşük seviyeli kontrol sağlarken, bir Nesne İlişkisel Eşleyici (ORM), veritabanı tablolarını Python nesneleriyle eşleyerek veritabanı etkileşimlerini basitleştirir. SQLModel, aşağıdakiler üzerine inşa edilmiş modern ve asenkron öncelikli bir ORM'dir:

  • Pydantic: Veri doğrulama ve serileştirme için.
  • SQLAlchemy: Güçlü ve olgun Python SQL araç seti.

Modelleri bir kez tanımlayıp hem API istek/yanıtlarınız hem de veritabanı şemanız için kullanmanızı sağlar!

Setting up SQLModel for Async

SQLModel'i eşzamansız (asynchronous) olarak kullanmak için eşzamansız bir veritabanı motoruna ihtiyacınız vardır. Bu, genellikle asyncpg gibi (SQLAlchemy'nin asyncio aracılığıyla kullanabildiği) eşzamansız bir sürücü kullanmayı gerektirir. Motoru şu şekilde kurabilirsiniz:

from sqlmodel import create_engine, SQLModel
import asyncio

# Replace with your actual async PostgreSQL connection string
# The 'postgresql+asyncpg' part tells SQLAlchemy to use asyncpg
DATABASE_URL = "postgresql+asyncpg://postgres:mysecretpassword@localhost/testdb"

async def main():
    engine = create_engine(DATABASE_URL, echo=True)
    print("Async SQLModel engine created.")
    
    # In a real app, you'd usually create tables here
    # async with engine.begin() as conn:
    #     await conn.run_sync(SQLModel.metadata.create_all)
    
    # Just demonstrating engine creation for this example
    await engine.dispose()
    print("Engine disposed.")

if __name__ == "__main__":
    asyncio.run(main())

Your First SQLModel

SQLModel'de bir model tanımlamak son derece sezgiseldir. SQLModel'den miras alır ve Pydantic benzeri alan tanımlarını kullanırsınız. Bu tek tanım, hem veritabanı tablo şemanızı hem de API'nizin veri doğrulama şemasını oluşturur!

from typing import Optional
from sqlmodel import Field, SQLModel

class Hero(SQLModel, table=True):
    id: Optional[int] = Field(default=None, primary_key=True)
    name: str = Field(index=True)
    secret_name: str
    age: Optional[int] = Field(default=None, index=True)

# This model can now be used with FastAPI for request bodies
# and with SQLAlchemy for database interactions.
print("Hero model defined successfully!")

Async CRUD with SQLModel

Şimdi Hero modelimizi ve async motorumuzu kullanarak basit bir Oluşturma (Create) ve Okuma (Read) işlemi gerçekleştirelim. Veritabanı etkileşimleri için SQLAlchemy'nin ORM'inden AsyncSession kullanacağız.

from typing import Optional
from sqlmodel import Field, SQLModel, create_engine, Session, select
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine
from sqlalchemy.orm import sessionmaker
import asyncio

DATABASE_URL = "postgresql+asyncpg://postgres:mysecretpassword@localhost/testdb"
async_engine = create_async_engine(DATABASE_URL, echo=False)
AsyncSessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=async_engine, class_=AsyncSession)

class Hero(SQLModel, table=True):
    id: Optional[int] = Field(default=None, primary_key=True)
    name: str = Field(index=True)
    secret_name: str
    age: Optional[int] = Field(default=None, index=True)

async def create_db_and_tables():
    async with async_engine.begin() as conn:
        await conn.run_sync(SQLModel.metadata.create_all)
    print("Database tables created/updated.")

async def create_hero(hero: Hero):
    async with AsyncSessionLocal() as session:
        session.add(hero)
        await session.commit()
        await session.refresh(hero)
        print(f"Created hero: {hero.name} (ID: {hero.id})")
        return hero

async def get_heroes():
    async with AsyncSessionLocal() as session:
        statement = select(Hero)
        results = await session.execute(statement)
        heroes = results.scalars().all()
        print("\nAll Heroes:")
        for hero in heroes:
            print(f"- {hero.name} (Age: {hero.age})")
        return heroes

async def main():
    await create_db_and_tables()

    hero_1 = Hero(name="Deadpond", secret_name="Dive Wilson", age=28)
    hero_2 = Hero(name="Spider-Boy", secret_name="Pedro Parqueador")
    hero_3 = Hero(name="Rusty-Man", secret_name="Tommy Sharp", age=48)

    await create_hero(hero_1)
    await create_hero(hero_2)
    await create_hero(hero_3)

    await get_heroes()
    await async_engine.dispose()

if __name__ == "__main__":
    asyncio.run(main())

Async DB Check

Eşzamansız veritabanı erişiminin önemini öğrendiniz ve asyncpg ile SQLModel gibi araçları keşfettiniz. Şimdi öğrendiklerinizi test edelim!

Recap: Async DB for Scale

Harika bir iş çıkardın! Asenkron veritabanı erişimini başarıyla keşfettin.

  • Engellemeyen (non-blocking) I/O'nun yüksek performanslı FastAPI uygulamaları için neden hayati olduğunu anladık.
  • Düşük seviyeli bir asenkron PostgreSQL sürücüsü olarak asyncpg'yi tanıttık.
  • Pydantic ve SQLAlchemy'yi birleştiren, asenkron öncelikli bir ORM olan SQLModel hakkında bilgi edindik.
  • Bu araçlarla kurulum yapmanın ve CRUD işlemlerini gerçekleştirmenin pratik örneklerini gördük.

Asenkron veritabanı etkileşimlerinde ustalaşmak, gerçekten ölçeklenebilir ve hızlı yanıt veren arka uç servisleri oluşturmaya yönelik atılmış önemli bir adımdır!

Sıkça Sorulan Sorular

“Eşzamansız Veritabanı Erişimi” dersi ücretsiz mi?

Evet — “Eşzamansız Veritabanı Erişimi” 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 FastAPI Backend Development Bootcamp kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. FastAPI Backend Development Bootcamp kursu toplamda 4 dersten oluşur.

“Eşzamansız Veritabanı Erişimi” dersinde ne öğreneceğim?

Engelleme yapmayan veritabanı işlemleri için `asyncpg` ve `SQLModel` gibi eşzamansız veritabanı sürücülerini ve ORM'leri keşfedin. FastAPI Backend Development Bootcamp 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.

FastAPI Backend Development Bootcamp öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te FastAPI Backend Development Bootcamp, 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 2. dersidir.

“Eşzamansız Veritabanı Erişimi” 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 FastAPI Backend Development Bootcamp dersinde kod yazıp çalıştırabilir miyim?

Evet. Her FastAPI Backend Development Bootcamp 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

  1. Redis ile Önbellekleme Stratejileri
  2. Eşzamansız Veritabanı Erişimi
  3. Yük Dengeleme ve İzleme
  4. Arka Plan Görevleri ve İş Kuyrukları
← FastAPI Backend Development Bootcamp Sayfasına Dön