Join dan Pemuatan Malas vs Cepat
Hindari query N+1 saat menelusuri relasi.
Join dan Pemuatan Malas vs Cepat adalah pelajaran Flask Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Flask Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Flask Academy mencakup 4 pelajaran total.
Membuat Kueri Lintas Tabel
Terkadang Anda memfilter entitas induk berdasarkan data anak-anaknya. Sebuah join memungkinkan satu kueri mencakup dua tabel terkait sekaligus. 🔀
Tulis join
Panggil join() pada kueri untuk menyertakan model terkait, lalu lakukan filter pada salah satu sisi sebagai satu kueri gabungan.
q = User.query.join(Post).filter(Post.title == "Hi")Filter pada Tabel yang Digabungkan
Setelah melakukan join, kondisi pada model lain dapat digunakan, sehingga Anda dapat menemukan entitas induk berdasarkan isi anak-anaknya.
active = User.query.join(Post).filter(Post.public).all()Pemuatan Malas adalah Bawaan
Secara bawaan, relationship bersifat lazy: anak-anak hanya dimuat saat Anda benar-benar mengakses atribut tersebut.
user = User.query.first()
user.postsMasalah N+1
Melakukan perulangan pada entitas induk dan membaca anak-anaknya secara malas menjalankan satu kueri untuk setiap induk. Pola N+1 ini diam-diam menghancurkan kinerja. 😬
for u in User.query.all():
print(len(u.posts))Pemuatan Awal Mengatasinya
Eager loading mengambil baris terkait sejak awal, sehingga seluruh graf dimuat hanya dalam satu atau dua kueri.
joinedload dalam Satu Kueri
Gunakan joinedload untuk mengambil entitas induk dan anak-anaknya bersama-sama melalui satu join SQL.
from sqlalchemy.orm import joinedload
User.query.options(joinedload(User.posts)).all()selectinload untuk Koleksi
selectinload memuat anak-anak dalam kueri kedua yang diproses secara berkelompok, yang sering kali lebih mudah diskalakan untuk daftar satu-ke-banyak.
from sqlalchemy.orm import selectinload
User.query.options(selectinload(User.posts)).all()Tetapkan Strategi pada Model
Anda juga dapat memilih bawaan melalui opsi lazy milik relationship, seperti select, joined, atau selectin.
posts = db.relationship("Post", lazy="selectin")Join Tidak Melakukan Pemuatan Awal
Join biasa memfilter lintas tabel, tetapi tidak memuat relationship terlebih dahulu. Untuk itu, Anda tetap perlu menambahkan opsi eager.
Pilih Pemuatan dengan Sengaja
Lazy cukup untuk satu baris; gunakan eager loading setiap kali Anda melakukan perulangan pada banyak entitas induk dan membaca anak-anaknya.
Pemeriksaan Cepat
Anda melakukan perulangan pada 100 pengguna dan membaca post setiap pengguna. Masalah apa yang dapat ditimbulkan oleh pemuatan lazy?
Rangkuman: Join dan Pemuatan
Sekarang Anda dapat melakukan join pada tabel, mengenali N+1, dan mengatasinya dengan joinedload atau selectinload. Pembacaan relasional yang efisien, selesai! 🏁
Belajar Python dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 30
- Pelajaran
- 120
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Join dan Pemuatan Malas vs Cepat” gratis?
Ya — teks lengkap “Join dan Pemuatan Malas vs Cepat” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Flask Academy, upgrade ke CoddyKit PRO. Kursus Flask Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Join dan Pemuatan Malas vs Cepat”?
Hindari query N+1 saat menelusuri relasi. Kamu berlatih Flask Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Flask Academy?
Tidak diperlukan pengalaman sebelumnya. Flask Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Join dan Pemuatan Malas vs Cepat” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Flask Academy ini?
Ya. Setiap pelajaran Flask Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Ambil Baris dengan query dan get
- Filter, Urutkan, dan Batasi Hasil
- Tentukan Relasi dan Kunci Asing
- Join dan Pemuatan Malas vs Cepat