Bài 50: Kỹ thuật ORM trong Python với Cơ sở dữ liệu MySQL Server

Bài 48bài 49 các bạn đã lập trình thành thạo Python với MySQL Server, đã thực hiện đầy đủ các chức năng CRUD liên quan tới phần mềm quản lý.

Tuy nhiên, các cách lập trình ấy có một vài khuyết điểm như: Tốn thời gian viết các mã lệnh tương tác cơ sở dữ liệu, tốn thời gian mô hình hóa hướng đối tượng.

Các kỹ sư phần mềm họ đã phát triển một kỹ thuật ORM rất lợi hại để mô hình hóa đối tượng với các bảng dữ liệu một cách nhanh chóng.

ORM (Object Relational Mapping) là kỹ thuật trong lập trình phần mềm giúp ánh xạ dữ liệu từ cơ sở dữ liệu quan hệ vào các đối tượng trong mã nguồn. Điều này giúp giảm sự phụ thuộc vào cấu trúc của cơ sở dữ liệu, đồng thời tạo ra một cách tiếp cận linh hoạt hơn trong việc quản lý dữ liệu:

Tóm tắt một số Ưu điểm chính của ORM (hình nguồn medium):

  1. ORM giúp người lập trình tập trung hơn vào việc lập trình hướng đối tượng
  2. Cho phép truy cập vào code nghiệp vụ thay vì database
  3. Hạn chế những lỗi ngữ pháp trong SQL
  4. Quản lý Transaction và tạo key tự động
  5. Đơn giản và dễ sử dụng
  6. Ẩn chi tiết của những truy vấn SQL từ Object Oriented logic (OO-logic)
  7. Đem lại năng suất cao hơn cho lập trình viên
  8. Nâng cao tính độc lập
  9. Năng suất hơn nhờ việc viết code ít hơn
  10. Cho phép lập trình viên sử dụng lại code
  11. ORM Framework cho phép truy xuất nhanh hơn bằng cách cache dữ liệu
  12. Tự động thực hiện những thao tác với dữ liệu

Python cũng giống như các công ngữ lập trình C#, Java, nó cũng được cung cấp các thư viện khác nhau để thực hiện ORM:

Thông qua thư viện Python thì cơ sở dữ liệu sẽ được mapping hướng đối tượng theo nguyên tắc(hình nguồn medium) :

  • Tên bảng <-> Tên lớp
  • Các cột trong bảng<-> Thuộc tính của lớp
  • Từng dòng dữ liệu trong bảng <-> Các đối tượng của lớp

Ví dụ: Giả sử ta có bảng Person dưới đây, bảng này có 4 cột ID (Auto Increment), First_Name, Last_Name và Phone. Khi ORM ta có:

Tạo mới đối tượng ta không cần ID vì ID auto increment và tự động phát sinh giá trị khi chúng ta lưu thành công, khi truy vấn thì nó tự động có ID có giá trị được mapping lên.

Chú ý là bài học này ta vẫn sử dụng “Student Management” đã tạo trước đó. Nên để học tốt bài này thì các bạn cần học bài 47, bài 48bài 49 trước.

Chuỗi bài học này sẽ hướng dẫn các bạn sử dụng orm-mysql

Bước 0: Chuẩn bị cơ sở dữ liệu Student Management ở bài học trước:

Bước 1: cài đặt orm-mysql

pip install orm-mysql

Mở command line và chạy lệnh trên, ta có kết quả:

Bước 2: Tạo dự án “LearnMySQLORM” trong Pycharm, trong dự án này tạo file “TestORM.py” và tiến hành viết mã lệnh theo các bước sau:

Bước 3: Tạo file cấu hình kết nối cơ sở dữ liệu và tiến hành kết nối

from orm import Table, get_table

#configuration JSON for connection MySQL
CONFIG={
    'host': 'localhost',
    'port': 3306,
    'user': 'root',
    'password': '@Obama123',
    'database': 'studentmanagement'
}
#connect to database from JSON configuration
Table.connect(config_dict=CONFIG)

Ở trên ta dùng phương thức connect của Table để tiến hành kết nối cơ sở dữ liệu

Bước 4: Kết nối và mapping bảng dữ liệu, ví dụ ta muốn ORM cho bảng student:

#mapping student table
Student = get_table('student')

Bước 5: Truy vấn toàn bộ dữ liệu Sinh viên

#Query all students:
students = Student.all()
align='{0:<3} {1:<6} {2:<18} {3:<10}'
print(align.format('ID', 'Code','Name',"Age"))
for stu in students:
    print(align.format(stu.ID,stu.Code,stu.Name,stu.Age))

lệnh trên ta gọi hàm get_table(“student”), hàm này giúp ta mapping bảng student vào lớp đối tượng Student.

phương thức all() dùng để truy vấn toàn bộ dữ liệu Sinh viên

Kết quả thi khi thực hiện lệnh truy vấn toàn bộ Sinh viên:

Bước 6: Để tìm Student theo ID (tìm chi tiết, ta thường sử dụng)

#Find student detail by ID (eg: 2)
student = Student.find(2)
print("Id=",student.ID)
print("code=",student.Code)
print("name=",student.Name)
print("age=",student.Age)

Chạy lệnh trên ta có kết quả là chi tiết của Sinh viên có ID=2 được xuất ra màn hình:

Bước 7: Để thêm mới một Student:

#Insert new Student Object:
new_student = Student(Code="SV300",Name='Đông Tà',Age=25)

new_student.save()

Khi chạy mã lệnh trên, chương trình sẽ tự động thực hiện câu truy vấn:

SQL: INSERT INTO student (ID, Code, Name, Age, Avatar, Intro) VALUES (NULL, 'SV300', 'Đông Tà', 25, NULL, NULL); 

cột nào không có giá trị nó sẽ tự động có giá trị NULL

Thực hiện lệnh trên thành công thì MySQL Server sẽ có dữ liệu mới với thông tin được cung cấp ở trên.

Bước 8: Để chỉnh sử dữ liệu cho đối tượng Student:

#Update student detail by ID 3
student = Student.find(3)
student.update(Name="Nguyễn Thị Lung Linh",Age=23)

Coding trên minh họa việc chỉnh tên và tuổi của Student có mã Id=3

Chạy lệnh trên ta có kết quả:

Bước 9: Để xóa Student ta viết:

#Remove student  by ID 15
student = Student.find(15)
student.destroy()

Chạy mã lệnh, ta không còn thấy Sinh viên Đông Tà có mã 15 nữa.

Toàn bộ Coding ORM cho chức năng CRUD Tui tổng hợp ở đây:

from orm import Table, get_table

#configuration JSON for connection MySQL
CONFIG={
    'host': 'localhost',
    'port': 3306,
    'user': 'root',
    'password': '@Obama123',
    'database': 'studentmanagement'
}
#connect to database from JSON configuration
Table.connect(config_dict=CONFIG)
#mapping student table
Student = get_table('student')
#Query all students:
students = Student.all()
align='{0:<3} {1:<6} {2:<18} {3:<10}'
print(align.format('ID', 'Code','Name',"Age"))
for stu in students:
    print(align.format(stu.ID,stu.Code,stu.Name,stu.Age))
#Find student detail by ID (eg: 2)
student = Student.find(2)
print("Id=",student.ID)
print("code=",student.Code)
print("name=",student.Name)
print("age=",student.Age)

#Insert new Student Object:
new_student = Student(Code="SV300",Name='Đông Tà',Age=25)

new_student.save()

#Update student detail by ID 3
student = Student.find(3)
student.update(Name="Nguyễn Thị Lung Linh",Age=23)

#Remove student  by ID 15
student = Student.find(15)
student.destroy()

Như vậy tới đây Tui đã trình bày xong ORM liên quan tới 1 bảng dữ liệu, đủ các chức năng CRUD. Các bạn chú ý thực hành nhiều lần để hiểu về nó, thành thạo về ORM.

Bài học sau Tui sẽ tiếp tục hướng dẫn ORM , tuy nhiên nâng cao hơn ở chỗ thực hiện ORM với các bảng có mối quan hệ, ví dụ Sinh viên – Môn học. Các bạn chú ý theo dõi, đây là các bài học quan trọng và thực tế

Các bạn tải mã nguồn đầy đủ của bài này ở đây:

https://www.mediafire.com/file/s5qfcwke9bikdki/LearnMySQLORM.rar/file

Chúc các bạn thành công

2 thoughts on “Bài 50: Kỹ thuật ORM trong Python với Cơ sở dữ liệu MySQL Server”

Leave a Reply