Hình ảnh chỉ mang tính chất minh họa
Ghi chú: Nội dung bài viết được cập nhật từ tháng 06/2019. Vì vậy sẽ có đôi chút khác biệt giữa video và nội dung bài viết. Chúng ta sẽ có nhiều cập nhật hơn về cả bài viết lẫn video trong thời gian tới. Nhớ like, share hoặc đánh giá 5 sao để Kteam có động lực nhé! Cảm ơn các bạn!
Dẫn nhập
Ở bài trước, Kteam đã hướng dẫn cho bạn về cách thiết kế Database bằng Model Django. Bây giờ, chúng ta cần tìm hiểu cách truy vấn dữ liệu để quản lý data bằng ngôn ngữ Python.
Nội dung
Để theo dõi bài này tốt nhất, bạn nên xem qua các bài sau:
- Giới thiệu về Python Django
- Tạo project với Python Django
- Tạo web app và xử lý khi người dùng yêu cầu truy cập trong Python Django
- Sử dụng template và Jinja trong Python Django
- File tĩnh và thiết kế web bằng Bootstrap trong Python Django
- Thiết kế hoàn chỉnh blog trong Python Django
- Dùng model tạo bảng Database bằng ngôn ngữ Python
Bài này sẽ giới thiệu những nội dung sau:
- Sử dụng Shell để truy vấn trực tiếp
- Cách insert value
- Cách select value
- Cách update value
Sử dụng Shell để truy vấn trực tiếp
Nếu chúng ta muốn viết những câu truy vấn trực tiếp, ta sẽ dùng câu lệnh shell của manage.py
để thực thi lần này. Đầu tiên, mở terminal và chạy câu lệnh sau:
python manage.py shell
Khi đó, manage
sẽ mở chương trình để chạy lệnh ngay trên CMD (terminal) để cho ta tương tác với những model mà ta muốn.
Nếu mình muốn tương tác với model Post
, thì phải import nó vào. Vì Post
nằm ở module models
trong app home
. Mình sẽ viết câu lệnh import
là:
from blog.models import Post
Bây giờ mình sẽ bắt đầu truy vấn đến bảng Post
.
Cách insert value
Bây giờ chúng ta vẫn dùng tư duy hướng đối tượng để insert value vào bảng. Kteam sẽ khởi tạo 1 instance Post
và truyền các giá trị vào các thuộc tính:
>>> a = Post()
>>> a.title = 'First Title'
>>> a.body = 'Hello World'
>>> a.save()
Kteam đã khởi tạo một instance a
thuộc class Post
, a
có thuộc tính title
là 'First Title', body
là 'Hello World'. Bây giờ muốn lưu thông tin a
vào bảng Post
trong database, Kteam sẽ gọi phương thức save()
, là phương thức hỗ trợ sẵn trong model dùng để insert hoặc update dữ liệu xuống Database.
Bây giờ ta thử DB Browser For SQLite mở file sqlite mà Kteam đang sử dụng và truy vấn câu select để lấy dữ liệu bảng Post
ra xem:
Ta thấy, đã có 1 row trong bảng. Ngoài cột title
và body
như ta đã truyền, thì ta đã có thêm cột id
(cột tự tăng theo quy tắc của Django) và cột date
tự tạo như mình đã mặc định ở bài trước.
Ở đây có 1 vấn đề là lúc này là ngày 14/09/2019 lúc 14h:28m nhưng cột date
lại là 07h:28m. Nguyên nhân do phần setting.py
nó mặc định giờ hệ thống ở múi giờ 0, trong khi nước mình lại ở múi giờ thứ 7. Ta có thể chỉnh lại sang giờ Việt Nam như sau, qua phần settings.py
chỉnh biến TIME_ZONE
là 'Asia/Ho_Chi_Minh'
Ngoài cách insert như trên, ta có thể viết gọn như sau:
>>> b = Post(title='Secondary Post', body='Hello Django')
>>> b.save()
Cách select value
Sau khi thêm dữ liệu, bây giờ ta muốn truy vấn lấy dữ liệu từ bảng ra. Để viết câu "select * from blog_post;", ta có thể sử dụng như sau:
>>> Post.objects.all()
Khi gọi phương thức này, ta nhận được kết quả là một QuerySet List chứa các instance Post
chính là 2 row dữ liệu ta vừa tạo trên trong bảng Post
. Vì cách hiển thị nó là "__str__
của class Post
để hiển thị tốt hơn. Ta vào module models
để override như sau:
def __str__(self):
return self.title
Phương thức __str__
sẽ return giá trị title
, nên mỗi lần print instance thuộc class Post
thì nó sẽ hiển thị tiêu đề ra. Bây giờ ta hãy thoát shell (bằng lệnh exit()
) để chạy lại xem kết quả có khác không.
Ta đã thấy kết quả trả về là tiêu đề của 2 element trong List QuerySet.
Nếu ta muốn câu truy vấn có điều kiện thì ta dùng phương thức get
và truyền tham số là field của models đó bằng dữ liệu mà ta muốn tìm. Giống như Kteam muốn tìm Post có id
bằng 1 hoặc Post có title bằng 'Secondary Post':
>>> Post.objects.get(id=1)
>>> Post.objects.get(title='Secondary Post')
Cách update value
Việc cập nhật dữ liệu ở Django khá đơn giản, ta chỉ cần truy vấn tìm instance Post
muốn cập nhật, thay đổi thuộc tính mình cần và dùng phương thức save()
để cập nhật:
a = Post.objects.get(id=1)
a.body = 'Hello Kteam'
a.save()
Kết
Như vậy Kteam đã hướng dẫn bạn xong cách tương tác Database bằng ngôn ngữ Python.
Ở bài tiếp theo, Kteam sẽ giới thiệu cho bạn HỆ THỐNG ADMIN TRONG PYTHON DJANGO.
Cảm ơn bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của mình để phát triển bài viết tốt hơn. Đừng quên "Luyện tập - Thử thách - Không ngại khó".