ORM trong Django và Các Vận Hành Cơ Bản

Giới thiệu về ORM ORM (Object-Relational Mapping) là một khái niệm quan trọng trong các framework MVC hoặc MVT, giúp tách rời giữa mô hình dữ liệu và cơ sở dữ liệu. Điều này có nghĩa là thiết kế mô hình dữ liệu không phụ thuộc vào loại cơ sở dữ liệu cụ thể nào. Qua đó, việc thay đổi cơ sở dữ liệu trở nên dễ dàng hơn mà không cần viết lại nhiều mã nguồn.

# Tạo bảng với SQL
CREATE TABLE nhan_vien (
    id INT PRIMARY KEY AUTO_INCREMENT,
    ten VARCHAR(20),
    gioi_tinh BIT DEFAULT 1,
    ngay_sinh DATE,
    phong_ban VARCHAR(20),
    luong DECIMAL(8,2) UNSIGNED
);

# Thêm bản ghi vào bảng
INSERT INTO nhan_vien (ten, gioi_tinh, ngay_sinh, luong, phong_ban)
VALUES ("Hùng", 1, "1990-05-15", 7000, "Kỹ thuật");

# Truy vấn một bản ghi
SELECT * FROM nhan_vien WHERE tuoi = 30;

# Cập nhật một bản ghi
UPDATE nhan_vien SET ngay_sinh = "1992-06-18" WHERE id = 1;

# Xóa một bản ghi
DELETE FROM nhan_vien WHERE ten = "Hùng";

# Định nghĩa lớp Python tương ứng
from django.db import models

class NhanVien(models.Model):
    id = models.AutoField(primary_key=True)
    ten = models.CharField(max_length=20)
    gioi_tinh = models.BooleanField(default=True)
    ngay_sinh = models.DateField()
    phong_ban = models.CharField(max_length=20)
    luong = models.DecimalField(max_digits=8, decimal_places=2)

# Thêm bản ghi mới
nv = NhanVien(ten="Hùng", gioi_tinh=True, ngay_sinh="1990-05-15", phong_ban="Kỹ thuật")
nv.save()

# Truy vấn bản ghi
NhanVien.objects.filter(tuoi=30)

# Cập nhật bản ghi
NhanVien.objects.filter(id=1).update(ngay_sinh="1992-06-18")

# Xóa bản ghi
NhanVien.objects.filter(ten="Hùng").delete()
Tạo Bảng Trong Django 1. **Tạo mô hình** Đầu tiên, tạo một ứng dụng mới tên là `thuvien`. Trong file `models.py` của ứng dụng này, định nghĩa một mô hình:

from django.db import models

class Sach(models.Model):
    ma_so = models.AutoField(primary_key=True)
    tieu_de = models.CharField(max_length=50)
    trang_thai = models.BooleanField()
    ngay_xuat_ban = models.DateField()
    gia = models.DecimalField(max_digits=8, decimal_places=2)
    nha_xuat_ban = models.CharField(max_length=30)
2. **Các trường dữ liệu phổ biến** Dưới đây là danh sách một số trường thường được sử dụng trong Django: - **TextField**: Dùng để lưu trữ văn bản dài. - **IntegerField**: Lưu trữ số nguyên. - **FloatField**: Lưu trữ số thực với hai tham số: - `so_chu_so`: Tổng số chữ số. - `so_chu_so_thap_phan`: Số chữ số phần thập phân. - **BooleanField**: Trường kiểu true/false. - **DateField**: Lưu trữ ngày tháng với tùy chọn tự động cập nhật giá trị hiện tại khi đối tượng được tạo hoặc sửa đổi. - **DateTimeField**: Giống DateField nhưng lưu cả giờ phút giây. - **FileField/ImageField**: Dùng để tải lên tệp tin hoặc hình ảnh. **Thiết lập cấu hình** Để chuyển đổi mô hình thành bảng trong MySQL, bạn cần cấu hình settings.py như sau:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'quan_ly_sach', # Tên cơ sở dữ liệu
        'USER': 'root',         # Tài khoản đăng nhập
        'PASSWORD': '',         # Mật khẩu
        'HOST': '127.0.0.1',   # Địa chỉ máy chủ
        'PORT': '3306'          # Port mặc định của MySQL
    }
}
Sau khi cấu hình xong, chạy lệnh di chuyển cơ sở dữ liệu:

python manage.py makemigrations
python manage.py migrate
**Thêm bản ghi** Bạn có thể thêm bản ghi bằng hai cách:

# Cách 1: Tạo đối tượng rồi lưu
sach_moi = Sach(tieu_de="Lập trình Python", gia=120, ngay_xuat_ban="2022-01-15", nha_xuat_ban="Kim Đồng")
sach_moi.save()

# Cách 2: Sử dụng create
sach_moi = Sach.objects.create(tieu_de="Lập trình Java", gia=150, ngay_xuat_ban="2021-06-20", nha_xuat_ban="Thủ Đô")
**Truy vấn dữ liệu** Dưới đây là một số phương thức truy vấn phổ biến:

# Lấy tất cả các bản ghi
tat_ca = Sach.objects.all()

# Lọc theo điều kiện
ket_qua = Sach.objects.filter(gia__gt=100)

# Lấy một bản ghi duy nhất
mot_sach = Sach.objects.get(ma_so=1)

# Sắp xếp kết quả
sap_xep = Sach.objects.order_by('gia')

# Đếm số lượng bản ghi
so_luong = Sach.objects.count()
**Cập nhật và xóa**

# Cập nhật thông tin
Sach.objects.filter(ma_so=1).update(gia=130)

# Xóa bản ghi
Sach.objects.filter(tieu_de="Lập trình Python").delete()

Thẻ: Django orm mysql

Đăng vào ngày 21 tháng 6 lúc 21:15