Thứ Hai, 3 tháng 6, 2024

64. Quản lý sinh viên Python MySQL phần 5

Chúng ta tiếp tục với chương trình Quản Lý Sinh Viên Python MySQL

Trong phần này chúng ta sẽ viết hàm  tìm Sinh Viên theo ID. Trước khi viết hàm tìm sinh viên, cũng như chúng ta đã thảo luận trước đây, chúng ta viết một hàm cho biết số lượng sinh viên. Mặc dù chúng ta có thể không thật sự cần, nhưng như tinh thần của chính blog này, chúng muốn bạn thực hành càng nhiều càng tốt. MySQL có hàm COUNT trả về số lượng record trong bảng, chúng ta sẽ sử dụng để viết hàm soLuongSinhVien()

Đây là hàm soLuongSinhVien()

 

def soLuongSinhVien(self, mycursor):
        try:
            mycursor.execute("SELECT count(ID) FROM SinhVien")
            row = mycursor.fetchone()
            number_of_rows = row[0]

        except Error as e:
            print(e)
        return number_of_rows

 

Chúng ta sẽ đặt hàm vào class QuanLySinhVienSQL() như sau

 

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)

    def deleteById(self, mycursor):
        tiep_tuc = "Y"
        while tiep_tuc == "Y":
            idSV = input("Nhap ID cua sinh vien muon xoa: ")

            try:

                sql = "DELETE FROM SinhVien WHERE ID = %s"
                val = (idSV,)
                mycursor.execute(sql,val)
            except Error as error:
                print(error)

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

    def soLuongSinhVien(self, mycursor):
        try:
            mycursor.execute("SELECT count(ID) FROM SinhVien")
            row = mycursor.fetchone()
            number_of_rows = row[0]

        except Error as e:
            print(e)
        return number_of_rows



Chúng ta sẽ chạy thử bằng cách đặt lời gọi hàm vào file MainSQL.py 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(mycursor)
        mydb.commit()
        print("\nThem sinh vien thanh cong!")


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

    elif (key == 3):
        qlsv.deleteById(mycursor)
        mydb.commit()
        print("\nXoa sinh vien thanh cong!")


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


    elif (key == 5):
        qlsv.showSinhVien(mycursor)
        so_luong = str(qlsv.soLuongSinhVien(mycursor))
        print("So Sinh Vien: "+so_luong)

        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!")


Sử dụng PyCharm để chạy thử MainSQL.py


 

Bây giờ chúng ta sẽ sử dụng lệnh SELECT để viết hàm tìm sinh viên theo ID. Chúng ta sẽ đặt tên hàm là findByID(). Đây là code của hàm

def findByID(self, mycursor):
        idSV = input("Nhap ID cua sinh vien muon tim: ")
        try:
            slsv = soLuongSinhVien(mycursor)
            if (slsv > 0):
              sql = "SELECT * FROM SinhVien WHERE ID = %s"
              val = (idSV,)
              mycursor.execute(sql,val)
              row = mycursor.fetchone()

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

        except Error as e:
            print(e)
        

Đặt vào  class QuanLySinhVienSQL(), chúng ta chạy thử class QuanLySinhVienSQL()

 



Đây là code của lớp QuanLySinhVienSQL()

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)

    def deleteById(self, mycursor):
        tiep_tuc = "Y"
        while tiep_tuc == "Y":
            idSV = input("Nhap ID cua sinh vien muon xoa: ")

            try:

                sql = "DELETE FROM SinhVien WHERE ID = %s"
                val = (idSV,)
                mycursor.execute(sql,val)
            except Error as error:
                print(error)

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

    def soLuongSinhVien(self, mycursor):
        try:
            mycursor.execute("SELECT count(ID) FROM SinhVien")
            row = mycursor.fetchone()
            number_of_rows = row[0]

        except Error as e:
            print(e)
        return number_of_rows

    def findByID(self, mycursor):
        idSV = input("Nhap ID cua sinh vien muon tim: ")
        try:
            slsv = self.soLuongSinhVien(mycursor)
            if (slsv > 0):
                sql = "SELECT * FROM SinhVien WHERE ID = %s"
                val = (idSV,)
                mycursor.execute(sql, val)
                row = mycursor.fetchone()

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

        except Error as e:
            print(e)


 

Chúng ta cần đặt hàm vào file MainSQL.py để chạy thử 


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):
        qlsv.deleteById(mycursor)
        mydb.commit()
        print("\nXoa sinh vien thanh cong!")


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


    elif (key == 5):
        qlsv.showSinhVien(mycursor)
        so_luong = str(qlsv.soLuongSinhVien(mycursor))
        print("So Sinh Vien: "+so_luong)
        print("\nDanh sach sinh vien!")


    elif (key == 6):
        qlsv.findByID(mycursor)
        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!")




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


 


Phần tiếp theo


Phần trước


 

 

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

Đăng nhận xét