ทำความเข้าใจกับ Django ORM และ QuerySets โดย ทำเว็บไปกับคุณพ่อ
หมวดหมู่ การฝึกพัฒนาซอฟต์แวร์ | เขียนโดยคุณ ทำเว็บไปกับคุณพ่อ

ทำความเข้าใจกับ Django ORM และ QuerySets

โพสต์เมื่อ 9 เดือน, 2 สัปดาห์ ago | มีผู้อ่านทั้งหมด 367 คน

บทความอื่นๆ ของ ทำเว็บไปกับคุณพ่อ


     หลังจากเราได้ลองทำเกี่ยวกับระบบเว็บไซต์ทำหนังออนไลน์กันไปแล้ว ต่อไปก็ถึงเวลาที่เราจะเอาข้อมูลของเรานั้นมาใช้งานกันครับ โดยทั้งนี้ให้เราลองไปเพิ่มรายการหนังหรือหนังเรื่องอื่นๆ ในระบบหลังบ้านของเราผ่าน Django Admin ก่อน ให้ลองเพิ่มสักประมาณ 3-5 เรื่อง เพื่อที่จะได้ทำการดึงข้อมูลมาแสดงในเบื้องต้นได้ครับ หลังจากเพิ่มเสร็จแล้วตัวอย่างจะเป็นประมาณนี้ เพิ่มใน http://127.0.0.1:8000/admin/



หลังจากเพิ่มแล้วมาลองดูกันว่า QuerySets ทำงานยังไง?

     สำหรับ QuerySets ใน Django นั้นจะช่วยทำให้เราสามารถอ่านข้อมูลในฐานข้อมูลได้เร็วมาก โดยไม่จำเป็นต้องเขียนภาษา SQL เสริมเข้าไปตอนเรียกข้อมูลเลยครับ ให้ความรู้สึกเหมือนกับตอนที่เรากำลังเลือก Filter ข้อมูลมาแสดงผลใน Excel ยังไงอย่างนั้นเลยแหละ... เราลองมาทำตามตัวอย่างกันก่อนเบื้องต้นดีกว่าครับ

เปิดใช้ Django Shell เพื่อลองดึงข้อมูลจากฐานข้อมูล

แน่นอนว่าทุกการใช้งานโปรเจคของเราจะต้องเปิด env ทุกครั้งก่อนการใช้งานครับ ไม่งั้นอาจจะเกิด Error ขึ้นมาได้

C:\movieproject>env\Scripts\activate
(env) C:\movieproject>


การใช้งานให้เราพิมพ์ python manage.py shell ก็จะขึ้นข้อมูลประมาณนี้ออกมา

(env) C:\movieproject>python manage.py shell
Python 3.9.6 (tags/v3.9.6:db3ff76, Jun 28 2021, 15:26:21) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>>


ให้เราลองดึงข้อมูลของหนังทั้งหมดออกมาก่อน โดยพิมพ์กว่า movie.objects.all() .. แน่นอนว่าทาง Shell จะแจ้งว่าไม่พบข้อมูลของ movie เพราะเรายังไม่ได้ทำการ import ข้อมูลมาใช้งาน

>>> movie.objects.all()
Traceback (most recent call last):
  File "<console>", line 1, in <module>
NameError: name 'movie' is not defined
>>>


ให้เราใช้คำสั่ง from movie.models import Movie เพื่อให้ตัว Shell สามารถเข้าถึงโมเดล Movie ของเราก่อน

from movie.models import Movie


จากนั้นให้ลองใช้คำสั่ง Movie.objects.all() ทีนี้เราจะเห็นว่าใน Shell โชว์รายการของหนังที่เรามีทั้งหมดในระบบของเราแล้ว

>>> Movie.objects.all()
<QuerySet [<Movie: Marvel Avenger Django>, <Movie: The Suicide Squad>, <Movie: What If...?>, <Movie: Loki>, <Movie: A Quiet Place Part II>]>
>>>

หรือเราอาจจะใช้

>>> Movie.objects.all().order_by("created_date") ##สำหรับเรียงวันที่จากน้อยไปมาก
<QuerySet [<Movie: Marvel Avenger Django>, <Movie: The Suicide Squad>, <Movie: What If...?>, <Movie: Loki>, <Movie: A Quiet Place Part II>]>
>>> Movie.objects.all().order_by("-created_date") ##เรียงวันที่จากมากมาน้อย
<QuerySet [<Movie: A Quiet Place Part II>, <Movie: Loki>, <Movie: What If...?>, <Movie: The Suicide Squad>, <Movie: Marvel Avenger Django>]>
>>>

หลังจากเราไม่ได้ใช่งาน Django Shell แล้วให้เราพิมพ์ exit() เพื่อออกจาก Console ส่วนนี้ได้เลยครับ

คิดเห็นยังไงกับบทความของ ทำเว็บไปกับคุณพ่อ



บทความมาใหม่ที่อยากให้ลองอ่าน