Bài trước: Django (3) - Mô hình MVT
-----
1
Làm việc với cơ sở dữ liệu
Cơ sở dữ liệu có nhiều loại như:
– Cơ sở dữ liệu dạng tập tin (ví dụ: text, ASCII, dbf)
– Cơ sở dữ liệu quan hệ (dạng bảng)
– Cơ sở dữ liệu hướng đối tượng
– Cơ sở dữ liệu bán cấu trúc (xml, json)
Các ngôn ngữ lập trình thường cung cấp các thư viện để làm
việc với từng loại cơ sở dữ liệu.
Trong Django, model là thành phần làm việc với cơ sở dữ
liệu.
1.1
Sqlite
Sqlite là hệ quản trị cơ sở dữ liệu quan hệ mã nguồn mở.
Sqlite có kích thước nhỏ, chỉ khoảng 700KB, do D. Richard
Hipp tạo ra năm 2000 bằng ngôn ngữ lập trình C.
Sqlite hoạt động dưới dạng một thư viện, được nhúng trong
một chương trình chứ không theo mô hình client-server. Sqlite được sử dụng để
thao tác với cơ sở dữ liệu trong các ứng dụng desktop, mobile và website.
Sqlite đang được hầu hết các ngôn ngữ lập trình hỗ trợ.
Trong Sqlite, cơ sở dữ liệu được chứa trong một tập tin duy
nhất.
Nhược điểm của Sqlite: không thích hợp cho các hệ thống có
lượng dữ liệu lớn, phát sinh liên tục; tại một thời điểm, chỉ cho phép một
người ghi dữ liệu.
Hình sau thể hiện sự khác nhau giữa Sqlite và hệ quản trị cơ
sở dữ liệu client-server truyền thống:
Hình sau là kiến trúc hoạt động của Sqlite:
1.2 Thực hành với Sqlite
Mặc định, Django server sử dụng cơ sở dữ liệu Sqlite. Do vậy
khi tạo một dự án web bằng Django, Sqlite sẽ được cài đặt sẵn.
Xem thông tin cấu hình trong tập tin settings.py
[settings.py]
…
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
…
Để minh họa việc lập trình với cơ sở dữ liệu, phần này sẽ
tạo thêm web app có tên là blog.
– Vào cửa sổ dòng lệnh để tạo web app tên là blog:
D:\hocdjango\teowebsite>python manage.py startapp blog
– Khai báo app vừa tạo trong tập tin settings.py
[settings.py]
…
'django.contrib.messages',
'django.contrib.staticfiles',
'home', #moi them vao
'listItems',
'blog'
…
– Khi tạo web app, Django sẽ tạo sẵn tập tin model.py, chúng
ta sẽ khai báo các model dữ liệu trong tập tin này. Khai báo model dữ liệu
giống như khai báo các lớp trong lập trình hướng đối tượng. Ví dụ: tạo ra class
Post để lưu các bài viết,
[blog/models.py]
from django.db import models
# Create your models here.
class Post(models.Model):
title = models.CharField(max_length=100)
body = models.TextField()
date = models.DateTimeField(auto_now_add=True)
– Lớp Post kế thừa từ lớp django.db.models.Model: class Post(models.Model)
– Mỗi thuộc tính trong model kế thừa từ lớp Field, đây là
lớp ảo trong Django, lớp này có nhiều lớp kế thừa khác đại diện cho các kiểu dữ
liệu. Ví dụ CharField đại diện cho kiểu dữ liệu char, TextField đại diện cho
kiểu dữ liệu text, DateTimeField đại diện cho kiểu dữ liệu thời gian.
– Sau khi đã tạo các class trong models.py, chạy lệnh makemigrations blog để báo cho Django
cập nhật các nội dung vừa được khai báo trong models.py.
D:\hocdjango\teowebsite>python manage.py makemigrations blog
Migrations for 'blog':
blog\migrations\0001_initial.py
- Create model Post
– Model Post đã được tạo ra. Django sẽ tạo ra tập tin 0001_initial.py
để lưu sự thay đổi về model. Mở tập tin blog\migrations\0001_initial.py để xem
kết quả:
[blog\migrations\0001_initial.py]
# Generated by Django 3.1.7 on 2021-05-03 07:33
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Post',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=100)),
('body', models.TextField()),
('date', models.DateTimeField(auto_now_add=True)),
],
),
]
– Tải và cài đặt phần mềm DB browser for SQLite để quan sát
và thao tác với Sqlite: https://sqlitebrowser.org/.
Vào menu File/Open Database…, tìm và mở tập tin db.sqlite3. Chưa thấy có bảng
dữ liệu Post.
– Để cập nhật lại cơ sở dữ liệu, nghĩa là lưu và thực thi
các thay đổi từ model vào Sqlite, sử dụng lệnh migrate.
D:\hocdjango\teowebsite>python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, blog, contenttypes, sessions
Running migrations:
Applying blog.0001_initial... OK
– Mở lại DB browser, sẽ thấy xuất hiện bảng blog_post.
– Vậy là đã tạo được bảng để chứa dữ liệu, từ đây có thể
thực hiện các thao tác thêm, sửa, xóa các dòng tin trong bảng dữ liệu.
Xem thêm clip 7 (làm việc với model) của HowKteam:
https://www.youtube.com/watch?v=Sc2fy1XGFMc&list=PL33lvabfss1z8GYxjyMulCnhcYGk5ah8P&index=7
-----
Cập nhật: 4/5/2021
Bài sau: