Flask-SQLAlchemy Sık Kullanılan Sorgular Rehberi

SQLAlchemy, Python için güçlü bir ORM (Object-Relational Mapping) aracıdır ve Flask ile birlikte kullanıldığında veritabanı işlemlerini kolaylaştırır. İşte sık kullanılan sorgu örnekleri:

Temel Sorgular

1. Tüm Kayıtları Getirme

from yourapp import User  # User modelinizi import edin

# Tüm kullanıcıları getir
users = User.query.all()

2. ID ile Tek Kayıt Getirme

user = User.query.get(1)  # ID'si 1 olan kullanıcıyı getir

2. ID ile Tek Kayıt Getirme

from yourapp import User  # User modelinizi import edin

# Tüm kullanıcıları getir
users = User.query.all()

3. filter_by ile Sorgulama

# username 'ahmet' olan kullanıcıları getir
users = User.query.filter_by(username='ahmet').all()

# İlk eşleşen kaydı getir
user = User.query.filter_by(username='ahmet').first()

4. filter ile Daha Karmaşık Sorgular

from sqlalchemy import or_, and_, not_

# username 'ahmet' ve aktif olan kullanıcılar
users = User.query.filter(User.username == 'ahmet', User.is_active == True).all()

# OR koşulu
users = User.query.filter(or_(User.username == 'ahmet', User.username == 'mehmet')).all()

# Büyük/küçük karşılaştırmaları
users = User.query.filter(User.age > 18).all()

# LIKE sorgusu
users = User.query.filter(User.username.like('%met%')).all()

# IN sorgusu
users = User.query.filter(User.username.in_(['ahmet', 'mehmet', 'ayşe'])).all()

5. Sıralama (Order By)

# Yaşa göre artan sıralama
users = User.query.order_by(User.age).all()

# Yaşa göre azalan sıralama
users = User.query.order_by(User.age.desc()).all()

# Çoklu sıralama
users = User.query.order_by(User.last_name, User.first_name).all()

6. Limit ve Offset

# İlk 5 kaydı getir
users = User.query.limit(5).all()

# İlk 10 kaydı atla, sonraki 5 kaydı getir (sayfalama için)
users = User.query.offset(10).limit(5).all()

İlişkili Tablo Sorguları

1. Bir-Çok İlişki Sorguları

# Kullanıcının tüm gönderilerini getir (User.posts ilişkisi varsa)
user = User.query.get(1)
posts = user.posts.all()

# Gönderisi olan tüm kullanıcıları getir
users = User.query.filter(User.posts.any()).all()

# Belirli başlığa sahip gönderisi olan kullanıcılar
users = User.query.filter(User.posts.any(title='Merhaba')).all()

2. Çok-Çok İlişki Sorguları

# Kullanıcının tüm rollerini getir (User.roles ilişkisi varsa)
user = User.query.get(1)
roles = user.roles.all()

# Admin rolüne sahip kullanıcılar
admins = User.query.filter(User.roles.any(name='admin')).all()

Gruplama ve Toplama Fonksiyonları

1. Count

from sqlalchemy import func

# Toplam kullanıcı sayısı
count = db.session.query(func.count(User.id)).scalar()

# Aktif kullanıcı sayısı
active_count = db.session.query(func.count(User.id)).filter(User.is_active == True).scalar()

2. Gruplama

# Yaş gruplarına göre kullanıcı sayısı
age_groups = db.session.query(User.age, func.count(User.id)).group_by(User.age).all()

3. Diğer Toplama Fonksiyonları

# Ortalama yaş
avg_age = db.session.query(func.avg(User.age)).scalar()

# Maksimum yaş
max_age = db.session.query(func.max(User.age)).scalar()

# Minimum yaş
min_age = db.session.query(func.min(User.age)).scalar()

Güncelleme ve Silme İşlemleri

1. Kayıt Güncelleme

user = User.query.get(1)
user.username = 'yeni_kullanici_adi'
db.session.commit()

2. Toplu Güncelleme

# Tüm aktif olmayan kullanıcıları aktif yap
User.query.filter_by(is_active=False).update({'is_active': True})
db.session.commit()

3. Kayıt Silme

user = User.query.get(1)
db.session.delete(user)
db.session.commit()

4. Toplu Silme

# 18 yaş altındaki tüm kullanıcıları sil
User.query.filter(User.age < 18).delete()
db.session.commit()

Yorum gönder