Django (4) - Làm việc với cơ sở dữ liệu

 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: