Chủ Nhật, 2 tháng 6, 2024

62. Quản lý sinh viên Python MySQL phần 3

Sau khi đã tạo Database và bảng SinhVien, chúng ta cần chèn thông tin sinh viên vào bảng.

Chúng ta sẽ viết một hàm để làm việc đó. Tuy nhiên đã đến lúc chúng ta hoàn thiện Menu cho chương trình trong file MainSQL.py

Chúng ta sẽ thêm phần tạo menu vào MainSQL.py

 

while (1 == 1):
    print("*************************MENU********")
    print("**  1. Them sinh vien.                                **")
    print("**  2. Cap nhat thong tin sinh vien bang ID  **")
    print("**  3. Xoa sinh vien theo ID.                      **")
    print("**  4. Tim kiem sinh vien theo ten.             **")
    print("**  5. Hien thi danh sach sinh vien.            **")
    print("**  6. Tim kiem sinh vien theo ID.             **")
    print("**  0. Thoat                                              **")
    print("*************************************")

    key = int(input("Nhap tuy chon de bat dau chương trinh: "))
    if (key == 1):       
        print("\nThem sinh vien thanh cong!")
        

    elif (key == 2):
        print("\nCap nhat sinh vien thanh cong!")

    elif (key == 3):
        print("\nXoa sinh vien thanh cong!")


    elif (key == 4):
        print("\nKet qua tim kiem!")


    elif (key == 5):
        print("\nDanh sach sinh vien!")


    elif (key == 6):
        print("\nTim kiem sinh vien theo ID!"+tenSV)

    elif (key == 0):
        print("\nDa thoat khoi chương trinh thanh cong!")
        break


    else:
        print("\nKhong co chuc nang nay!") 

 

Sau đó chúng ta sẽ đặt những hàm đã viết vào đúng vị trí của nó, giờ đây code của trang MainSQL.py sẽ như sau


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()
qlsv.taoCSDL(mycursor)
qlsv.taoBang(mycursor)

while (1 == 1):
    print("***********************MENU***********")
    print("**  1. Them sinh vien.                                  **")
    print("**  2. Cap nhat thong tin sinh vien bang ID   **")
    print("**  3. Xoa sinh vien theo ID.                        **")
    print("**  4. Tim kiem sinh vien theo ten.               **")
    print("**  5. Hien thi danh sach sinh vien.              **")
    print("**  6. Tim kiem sinh vien theo ID.                **")
    print("**  0. Thoat                                              **")
    print("**************************************")

    key = int(input("Nhap tuy chon de bat dau chương trinh: "))
    if (key == 1):
        qlsv.nhapSinhVien()
        print("\nThem sinh vien thanh cong!")


    elif (key == 2):
        print("\nCap nhat sinh vien thanh cong!")

    elif (key == 3):
        print("\nXoa sinh vien thanh cong!")


    elif (key == 4):
        print("\nKet qua tim kiem!")


    elif (key == 5):
        print("\nDanh sach sinh vien!")


    elif (key == 6):
        print("\nTim kiem sinh vien theo ID!")

    elif (key == 0):
        print("\nDa thoat khoi chương trinh thanh cong!")
        break


    else:
        print("\nKhong co chuc nang nay!")


Chúng ta sẽ dùng PyCharm để chạy thử MainSQL.py

 


 

Bây giờ chúng ta sẽ viết hàm chèn thêm sinh viên vào bảng SinhVien. Ta sẽ xóa hàm nhapSinhVien() đã viết với việc in "Hello" trước đây và viết một hàm mới có tham số. Chúng ta sẽ cần xử lý Exception trong các hàm thao tác với Database.

Như chúng ta đã thảo luận trong chương trình tào lao với Python và MySQL trước đây, việc chèn thêm sinh viên vào bảng sẽ được thực hiện bằng lệnh INSERT INTO.

Bạn có thể coi lại phần viết hàm nhập tên sinh viên không sử dụng Database và  chương trình tào lao với Database để hình dung về hàm chúng ta sẽ viết.

Tạm thời code của hàm nhapSinhVien() sẽ như sau

 

def nhapSinhVien(self, mycursor):
    tiep_tuc = "Y"
      while tiep_tuc == "Y":
        tenSV = input("Nhap Ho va Ten cua sinh vien: ")
        gioitinhSV = input("Nhap Gioi Tinh sinh vien: ")
        diachiSV = input("Nhap Dia Chi cua sinh vien: ")
        nganhhocSV = input("Nhap Nganh Hoc sinh vien: ")
        
        sql = "INSERT INTO SinhVien (ten, gioitinh, diachi, nganhhoc) VALUES (%s, %s, %s, %s)"
        val = (tenSV, gioitinhSV, diachiSV, nganhhocSV)
        mycursor.execute(sql, val)

        
        tiep_tuc = input("Tiep tuc ? Y/N ")


Chúng ta sẽ cần xử lý Exception hàm nhapSinhVien(). Nhưng trước hết chúng ta cứ cho nó vào class QuanLySinhVien để thử xem có lỗi gì không. Bấm Run để chạy class QuanLySinhVien

 

Đây là hàm nhapSinhVien đã thêm phần xử lý ngoại lệ

 

def nhapSinhVien(self, mycursor):
    tiep_tuc = "Y"
      while tiep_tuc == "Y":
        tenSV = input("Nhap Ho va Ten cua sinh vien: ")
        gioitinhSV = input("Nhap Gioi Tinh sinh vien: ")
        diachiSV = input("Nhap Dia Chi cua sinh vien: ")
        nganhhocSV = input("Nhap Nganh Hoc sinh vien: ")
       
try:
            sql = "INSERT INTO SinhVien (ten, gioitinh, diachi, nganhhoc) VALUES (%s, %s, %s, %s)"
            val = (tenSV, gioitinhSV, diachiSV, nganhhocSV)
            mycursor.execute(sql, val)
        
except Error as error:
            print(error)

        
        tiep_tuc = input("Tiep tuc ? Y/N ")
 


Để có thể hưởng thụ thành quả, chúng ta sẽ viết luôn hàm hiển thị danh sách sinh viên.

Đây là hàm hiển thị danh sách sinh viên showSinhVien()

def showSinhVien(self, mycursor):
    try:

          mycursor.execute("SELECT * FROM SinhVien")
          row = mycursor.fetchone()
 
          while row is not None:
              print(row)
              row = mycursor.fetchone()
 
      except Error as e:
          print(e) 

 

Sau khi đặt hàm hiển thị danh sách sinh viên và nhập sinh viên vào, class QuanLySinhVien() sẽ như thế này:

 

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


class QuanLySinhVienSQL:

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

    def mydbConnection(self, 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

    def taoCSDL(self, mycursor):
        # Kiem tra database co ton tai hay khong
        mycursor.execute("SHOW DATABASES")
        databases = mycursor.fetchall()

        database_exists = False
        for database in databases:
            if 'mydatabase' in database:
                database_exists = True
                break

        if database_exists:
            print("Database Ton Tai")
        else:
            print("Database Khong Ton Tai")
            mycursor.execute("CREATE DATABASE sinhviendatabase")

    def taoBang(self, mycursor):
        # Kiem tra table co ton tai hay khong
        mycursor.execute("USE sinhviendatabase")
        mycursor.execute("SHOW TABLES")
        tables = mycursor.fetchall()

        table_exists = False
        for (table,) in tables:
            if ('sinhvien',) in tables:
                print("Table Ton Tai!!")
                table_exists = True
                break

        if table_exists:
            print("Table Ton Tai")
        else:
            print("Table Khong Ton Tai")
            mycursor.execute(
                "CREATE TABLE SinhVien (id INT(11) PRIMARY KEY NOT NULL AUTO_INCREMENT, ten VARCHAR(255), gioitinh VARCHAR(100), diachi VARCHAR(255), nganhhoc VARCHAR(100))")

    def nhapSinhVien(self, mycursor):
        tiep_tuc = "Y"
        while tiep_tuc == "Y":
            tenSV = input("Nhap Ho va Ten cua sinh vien: ")
            gioitinhSV = input("Nhap Gioi Tinh sinh vien: ")
            diachiSV = input("Nhap Dia Chi cua sinh vien: ")
            nganhhocSV = input("Nhap Nganh Hoc sinh vien: ")
            try:
                sql = "INSERT INTO SinhVien (ten, gioitinh, diachi, nganhhoc) VALUES (%s, %s, %s, %s)"
                val = (tenSV, gioitinhSV, diachiSV, nganhhocSV)
                mycursor.execute(sql, val)
            except Error as error:
                print(error)

            tiep_tuc = input("Tiep tuc ? Y/N ")



    def showSinhVien(self, mycursor):
        try:

            mycursor.execute("SELECT * FROM SinhVien")
            row = mycursor.fetchone()

            while row is not None:
                print(row)
                row = mycursor.fetchone()

        except Error as e:
            print(e)



Chúng ta sẽ gọi các hàm trong file MainSQL.py. Đây là MainSQL sau khi đã thêm lời gọi hàm cho các chức năng tương ứng.


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()
qlsv.taoCSDL(mycursor)
qlsv.taoBang(mycursor)

while (1 == 1):
    print("***********************MENU***************")
    print("**  1. Them sinh vien.                                         **")
    print("**  2. Cap nhat thong tin sinh vien bang ID           **")
    print("**  3. Xoa sinh vien theo ID.                                **")
    print("**  4. Tim kiem sinh vien theo ten.                       **")
    print("**  5. Hien thi danh sach sinh vien.                      **")
    print("**  6. Tim kiem sinh vien theo ID.                        **")
    print("**  0. Thoat                                                       **")
    print("******************************************")

key = int(input("Nhap tuy chon de bat dau chương trinh: "))
    if (key == 1):
        qlsv.nhapSinhVien(mycursor)
        mydb.commit()

        print("\nThem sinh vien thanh cong!")


    elif (key == 2):
        print("\nCap nhat sinh vien thanh cong!")

    elif (key == 3):
        print("\nXoa sinh vien thanh cong!")


    elif (key == 4):
        print("\nKet qua tim kiem!")


    elif (key == 5):
        qlsv.showSinhVien(mycursor)
        print("\nDanh sach sinh vien!")


    elif (key == 6):
        print("\nTim kiem sinh vien theo ID!")

    elif (key == 0):
        print("\nDa thoat khoi chương trinh thanh cong!")
        break


    else:
        print("\nKhong co chuc nang nay!")



Chạy chương trình, mọi thứ đã ổn định, chương trình thực thi đúng theo mong muốn của chúng ta, ID sẽ tự động tăng dần.




 

Mọi thứ đã nằm trong cơ sở dữ liệu. Dù bạn có tắt máy thì lần làm việc tiếp theo, danh sách sinh viên sẽ vẫn nằm yên tại đó. 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