آشنایی با QuerySet در جنگو

django queryset introduction
20 آبان 1403

جنگو یکی از محبوب‌ترین فریمورک‌های وب برنامه‌نویسی پایتون است که به توسعه‌دهندگان این امکان را می‌دهد تا به سرعت برنامه‌های وب قدرتمندی بسازند. یک از بخش‌های اصلی و بسیار مهم جنگو، سیستم ORM (Object-Relational Mapping) آن است که به شما اجازه می‌دهد به راحتی با پایگاه داده‌های مختلف ارتباط برقرار کنید بدون اینکه نیاز باشد مستقیماً از SQL استفاده کنید.

یکی از مفاهیم کلیدی در این سیستم ORM، چیزی است به نام QuerySet. این مفهوم به شما اجازه می‌دهد که داده‌ها را از پایگاه داده با استفاده از شیوه‌های پایتونیک انتخاب و فیلتر کنید. می‌توان گفت که QuerySet لیستی از اشیا مدل است که انتخاب یا فیلتر می‌شوند.

زمانی که با QuerySet کار می‌کنید، شما دارید با یک مدل سطح بالا ولی انعطاف‌پذیر و قدرتمند همگام شده‌اید. همه چیزی که نیاز دارید این است که با این مدل همچون یک راهنمای مترجم برای SQL رفتار کنید که درخواست‌های شما را به زبان پایگاه داده تبدیل می‌کند و همچنین نتیجه را مجدداً به شکل قابل استفاده توسط پایتون ارائه می‌دهد.

بنابراین، اگر تاکنون با دیتابیس‌های SQL کار کرده‌اید و نیاز داشته‌اید تا کوئری‌هایی به زبان SQL بنویسید، در جنگو به جای نوشتن کوئری‌های مستقیم به کمک QuerySet می‌توانید از متدهای پایتونیک بهره بگیرید تا به همان نتایج دست پیدا کنید.

در اینجا مثالی از نحوه استفاده از QuerySet برای فیلتر کردن داده‌ها در مدل‌های جنگو آورده شده است:

from myapp.models import Book

# Get all books
books = Book.objects.all()

# Filter books by title
titled_books = Book.objects.filter(title='Django Unleashed')

# Get a single book by primary key
book = Book.objects.get(pk=1)

در مثال بالا، Book.objects.all() تمامی اشیا موجود در مدل Book را انتخاب می‌کند.
Book.objects.filter(title='Django Unleashed') تمامی کتاب‌هایی که عنوان آنها 'Django Unleashed' است را فیلتر و انتخاب می‌کند.
Book.objects.get(pk=1) کتابی که شناسه اولیه (primary key) آن ۱ است را انتخاب می‌کند.

سوالات متداول

؟

چگونه همه اشیا یک مدل را دریافت کنیم؟

؟

چگونه اشیای یک مدل را براساس یک ویژگی خاص فیلتر کنیم؟

؟

چگونه یک شی خاص را با استفاده از کلید اولیه دریافت کنیم؟