CodeBlanks Logo Icon CodeBlanks

Query

session.query ile sorgu yapmayı öğrenirsin.

Query

session.query(Model), bir sorgu nesnesi döndürür. .all() tüm sonuçları liste olarak verir; .filter(...) koşul ekler; .first() ilk sonucu verir.

users = session.query(User).all()
active = session.query(User).filter(User.name == "Ayşe").first()
print(users[0].name)

Sorgu nesnesi tembeldir; .all(), .first() veya .count() çağrılana kadar veritabanına gitmez.

filter ile koşul

.filter(...) koşul ekler. SQLAlchemy sütunları Python nesnesi olarak kullanıldığı için ==, !=, >, < gibi işleçlerle karşılaştırma yapılır.

# adı 'Ayşe' olanlar
session.query(User).filter(User.name == "Ayşe").all()
# yaşı 18'den büyük olanlar
session.query(User).filter(User.age > 18).all()

Birden çok koşul için filter(a, b) veya filter(a).filter(b) kullanılır; ikisi de AND anlamına gelir.

Uygulama User kaydet ve sorgula

from sqlalchemy import create_engine, Column, Integer, String, from sqlalchemy.orm import declarative_base, sessionmaker ile başla. Base = declarative_base() ve class User(Base): tanımla (__tablename__ = "users", id = Column(Integer, primary_key=True), name = Column(String)). engine = create_engine("sqlite:///:memory:") ve Base.metadata.create_all(engine) ile tabloları oluştur. Session = sessionmaker(bind=engine) ve session = Session() ile oturum aç. session.add(User(name="Ayşe")) ve session.commit() ile kayıt ekle. users = session.query(User).all() ile sorgula. print(users[0].name) ile adı yazdır.

Başlangıç kodu

main.py
# sqlalchemyden create_engine, Column, Integer, String'i içe aktar
# declarative_base ve sessionmaker'ı içe aktar
# Base ve User sınıfını tanımla (id, name sütunları)
# motoru oluştur ve tabloları yarat (create_all)
# oturum aç, bir User ekle ve commit yap
# query(User).all() ile sorgula, ilk kaydın adını yazdır

Örnek çözüm

main.py
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import declarative_base, sessionmaker

Base = declarative_base()

class User(Base):
    __tablename__ = "users"
    id = Column(Integer, primary_key=True)
    name = Column(String)

engine = create_engine("sqlite:///:memory:")
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()
session.add(User(name="Ayşe"))
session.commit()
users = session.query(User).all()
print(users[0].name)

Beklenen çıktı

Ayşe

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 query çağrısını tamamla

Soru
users = session.____(User).all()
Cevap
users = session.query(User).all()

Açıklama: session.query(Model) ile sorgu başlatılır.

2 query(Model).all() ne döndürür?

  • Tüm sonuçların listesi Doğru cevap
  • Tek bir nesne
  • Bir sorgu dizesi
  • Bir Engine nesnesi

Açıklama: .all() tüm sonuçları bir liste olarak döndürür.

3 Query kavramlarını eşleştir

Kavram Anlamı
session.query Sorgu başlatır
.all() Liste döndürür
.filter(...) Koşul ekler
.first() İlk sonucu verir

İleri seviye bölümündeki tüm dersler