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