Thứ Bảy, 1 tháng 6, 2024

60. Quản lý sinh viên Python MySQL

Chúng ta sẽ phát triển chương trình Quản Lý Sinh Viên bằng Python kết hợp với MySQL.

Tạm hình dung chương trình sẽ như sau.

Phác thảo

  • Chương trình sẽ có một danh sách sinh viên với tên, địa chỉ, điểm môn học...
  • Người sử dụng có thể thêm tên sinh viên, sửa thông tin, xóa một sinh viên khỏi danh sách, tìm kiếm sinh viên, sắp xếp sinh viên...
  • Cần một bảng điều khiển với các lựa chọn tương ứng như Thêm, Xóa, Sửa, Sắp Xếp, Tìm Kiếm... 

Cụ thể

Hãy nghĩ về lớp , cùng với MySQL dựa trên phác thảo trên:

  • Chúng ta sẽ cần tạo một lớp Sinh Viên với các thuộc tính tên, điểm...
  • Chúng ta cũng cần một lớp Quản Lý Sinh Viên với các hàm Thêm, Xóa, Sửa, Sắp Xếp, Tìm Kiếm... Mỗi khi hàm được gọi nó sẽ thao tác thêm, xóa, tìm kiếm... với dữ liệu từ Đối tượng của Lớp Sinh Viên và lưu lại vào Database của MySQL
  • Bảng điều khiển không cần tạo lớp, đơn giản chỉ là một trang .py với các lựa chọn. Ví dụ khi cần thêm tên sinh viên, khi người sử dụng chọn chức năng Thêm thì trang điều khiển sẽ gọi Hàm thêm tên sinh viên từ lớp Quản Lý Sinh Viên. Bảng điều khiển cũng cần có chức năng kết nối với Database
  • Chúng ta sẽ cần một chương trình Database được cài đặt sẵn, thông thường là MySQL. Sẽ có một chút rắc rối trong lúc thực hành, tuy nhiên việc giải quyết rất đơn giản.

Đễ dễ dàng quản lý, chúng ta sẽ lưu mỗi lớp trong chương trình vào một file .py và đặt tên bảng điều khiển là mainSQL.py

Như vậy chúng ta sẽ có 3 file: MainSQL.py, SinhVienSQL.pyQuanLySinhVienSQL.py

 

Việc đầu tiên và quan trọng là cài đặt lại MySQL

Lưu ý: Vì là một phần mềm khá nặng, hơn nữa việc biến máy tính thành một Server không thật sự là một ý tưởng an toàn,  nên chúng tôi thường xóa, gỡ bỏ MySQL khỏi máy sau mỗi lần thực hành. Cũng chính vì vậy, trong quá trình cài đặt chúng tôi thường bỏ lựa chọn Windows Service, và cài đặt lại MySQL mỗi khi cần. Nếu bạn không muốn phiền phức, thì bạn cần chọn MySQL như một Windows Service trong quá trình cài đặt và thiết lập để Windows sẽ tự động chạy MySQL mỗi khi máy tính khởi động. Sau khi cài đặt lại, chúng ta sẽ viết code cho các lớp.



 

Mặt khác, nếu bạn đã cài đặt như hướng dẫn, không gỡ bỏ MySQL và đã shutdown máy tính, sau đó khởi động lại máy, khi bạn chạy file Test1 cũ hoặc theo hương dẫn bên dưới nếu gặp lỗi, bạn chỉ cần chạy lại file cài đặt và bấm vào Reconfigure để cấu hình lại MySQL. 




Chúng ta sẽ coi như MySQL Server đã sẵn sàng.

Chúng ta sẽ bắt đầu từ lớp Sinh viên

Chúng ta sẽ tạo một lớp SinhVienSQL , một lớp QuanLySinhVienSQL với chỉ một hàm nhapSinhVien(), một trang MainSQL.py với chỉ một lựa chọn Nhập Tên Sinh viên và chạy thử. Nếu mọi thứ suôn sẻ, chúng ta sẽ mở rộng các chức năng.

Lớp SinhVienSQL

Chúng ta sử dụng hàm _init_() để làm "bộ khung" cho lớp SinhVienSQL.

Mở PyCharm lên, bấm vào File => New => Python File và đặt tên SinhVienSQL.py

Tạo một class với tên là SinhVienSQL như sau

   

class SinhVienSQL:
       def __init__(self, id, ten, gioitinh, diachi, nganhhoc):
        self.id = id
        self.ten =ten
        self.gioitinh = gioitinh
        self.diachi = diachi
        self.nganhhoc = nganhhoc




Bấm Run để chạy thử, sẽ không có gì "xuất hiện" chúng ta chỉ muốn thử coi mọi thứ có ổn không mà thôi.




Tiếp theo là lớp Quản lý Sinh viên.

Chúng ta tiếp tục bấm vào File => New => Python File và đặt tên QuanLySinhVienSQL.py

Chúng ta sẽ tạo một class QuanLySinhVienSQL

from SinhVienSQL import SinhVienSQL

class QuanLySinhVienSQL:
   

 

Bấm Run để chạy thử


 

Tiếp theo chúng ta bấm vào File => New => Python File và đặt tên MainSQL.py  
 

MainSQL.py của chúng ta được sử dụng để khởi tạo menu và điều khiển chương trình quản lý sinh viên, đồng thời sẽ tạm thời kết nối với Database. Tức là khi người sử dụng vào chương trình quản lý sinh viên, màn hình đầu tiên họ thấy sẽ là MainSQL.py với các menu để lựa chọn như: Thêm, Xóa, Tìm Kiếm,...

Để quản lý, chúng ta cần import class QuanLySinhVienSQL, sau đó chúng ta cần khởi tạo một đối tượng quản lý sinh viên.

from QuanLySinhVienSQL import QuanLySinhVienSQL

# khởi tạo một đối tượng QuanLySinhVienSQL để quản lý sinh viên
qlsv = QuanLySinhVienSQL()


Tiếp theo chúng ta cần tạo và kết nối với Database tạm thời (việc kết nối nên là một hàm đặt trong class QuanLySinhVienSQL)

Chúng ta sẽ tạo một database. Giả sử như khi bạn cài đặt MySQL bạn không tạo thêm user, khi đó user mặc định sẽ là "root"


import mysql.connector

mydb = mysql.connector.connect(
  host="localhost",
  user="root",
  password="password của bạn"
)

mycursor = mydb.cursor()

mycursor.execute("CREATE DATABASE sinhviendatabase")

 

 

Đây là code của MainSQL.py

 

import mysql.connector
from QuanLySinhVienSQL import QuanLySinhVienSQL

# khởi tạo một đối tượng QuanLySinhVienSQL để quản lý sinh viên
qlsv = QuanLySinhVienSQL()

mydb = mysql.connector.connect(
  host="localhost",
  user="root",
  password="password của bạn"
)

mycursor = mydb.cursor()

mycursor.execute("CREATE DATABASE sinhviendatabase")



Chúng ta bấm Run để chạy thử MainSQL.py

 



 

Chúng ta khoan nói về menu lựa chọn trong file MainSQL.py, chúng ta giả sử một cách đơn giản là khi ta Run MainSQL.py thì đối tượng qlsv sẽ thực thi hàm nhapSinhVien()


Chúng ta sẽ cần viết hàm nhapSinhVien() để thêm tên sinh viên trong class QuanLySinhVienSQL().  Trước hết chúng ta viết hàm đơn giản chỉ print một cái gì đó.

Trước đây, với chương trình không sử dụng Database, chúng ta sẽ phải "Gắn" cái record sinh viên Nguyễn Van A đó vào listSinhVien[]. Chúng ta có hàm append() để làm việc đó. Tuy nhiên, nếu sử dụng Database, chúng ta sẽ sử dụng lệnh Insert Into để chèn dữ liệu vào Database nên ta cũng đã bỏ lệnh  listSinhVien = []

Đây là code cho lớp QuanLySinhVienSQL()

from SinhVienSQL import SinhVienSQL

class QuanLySinhVienSQL:

    def nhapSinhVien(self):
        print("Hello")


Chuyển qua MainSQL.py, chúng ta sẽ có lệnh gọi hàm nhapSinhVien(). Đây là code của Main.py, chúng ta tạm khóa lệnh Create Database bằng dấu # vì như chúng ta đã thảo luận trước, nếu chúng ta chạy thử vài lần chương trình sẽ báo lỗi.

 

from QuanLySinhVienSQL import QuanLySinhVienSQL

# khởi tạo một đối tượng QuanLySinhVien để quản lý sinh viên
qlsv = QuanLySinhVienSQL()

           mydb = mysql.connector.connect(
               host="localhost",
               user="root",
               password="password của bạn"
          )

         mycursor = mydb.cursor()

       #mycursor.execute("CREATE DATABASE sinhviendatabase") 

qlsv.nhapSinhVien()


Bấm Run để chạy MainSQL.py


 

 

Như vậy là chúng ta đã thành công gọi một hàm từ class QuanLySinhVienSQL().

Tiếp theo chúng ta cần hoàn thiện hàm nhapSinhVien()

Nhưng trước khi thảo luận về hàm nhapSinhVien(), chúng ta cần chuyển việc kết nối Database thành một hàm riêng, nhằm làm "sạch môi trường", cái gì "hàm hóa" được chúng ta sẽ cho thành hàm hết! Trang MainSQL.py sẽ chỉ cần gọi các hàm "đúng chỗ đúng nơi" để thực thi mà thôi.

Cũng như việc bạn sử dụng điện thoại, "kết nối" luôn tiềm ẩn các "lỗi nào đó" vì vậy chúng ta sẽ cần sử dụng khối try để xử lý những Exception trong hàm kết nối. Chúng ta đặt tên hàm là mydbConnection(). Chúng ta cũng cần import những thứ cần thiết

import mysql.connector
from mysql.connector import Error

Và đây là class QuanLySinhVienSQL() hiện tại

 

from SinhVienSQL import SinhVienSQL
import mysql.connector
from mysql.connector import Error



class QuanLySinhVienSQL:

    def nhapSinhVien(self):
            print("Hello")

    def mydbConnection(host_name, user_name, user_password):
        connection = None
        try:
            connection = mysql.connector.connect(
                host=host_name,
                user=user_name,
                passwd=user_password
            )
            print("Connection to MySQL DB successful")
        except Error as e:
            print(f"The error '{e}' occurred")

        return connection

 

Trong trang MainSQL.py chúng ta chỉ cần gọi hàm mydbConnection() mà thôi. Đây là code của MainSQL.py hiện tại

 

import mysql.connector
from QuanLySinhVienSQL import QuanLySinhVienSQL

# khởi tạo một đối tượng QuanLySinhVienSQL để quản lý sinh viên
qlsv = QuanLySinhVienSQL()

mydb = qlsv.mydbConnection("localhost", "root", "password của bạn")

mycursor = mydb.cursor()

#mycursor.execute("CREATE DATABASE sinhviendatabase")

qlsv.nhapSinhVien()


Bấm Run để chạy MainSQL.py

 





Mỗi một sinh viên thêm vào chính là một đối tượng (Object) của lớp (Class) SinhVienSQL. Vì vậy trước khi thật sự thêm tên sinh viên từ bàn phím, chúng ta sẽ tạo sẵn một đối tượng SinhVienSQL và cho nó một cái tên. Tương tự thế này

sv = SinhVienSQL("1", "Nguyen Van A", "Nam", "123 HV Da Nang", "CNTT")
Chúng ta cần "chèn" thông tin này vào một table trong sinhviendatabase, chúng ta sẽ đặt tên table là sinhvien


Chúng ta sẽ tiếp tục trong phần sau.


Phần tiếp theo


Phần trước


Không có nhận xét nào:

Đăng nhận xét