Query
- Python kursu
- İleri seviye
- Ders 47/83
- 5 dk
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
# 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
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
users = session.____(User).all()
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 |