Thứ Hai, 3 tháng 6, 2024

65. Quản lý sinh viên Python MySQL phần 6

Chúng ta sẽ tiếp tục ứng dụng Quản lý sinh viên dùng Python và MySQL

Phần này chúng ta sẽ thảo luận về hàm tìm kiếm theo tên và hàm cập nhật thông tin sinh viên.

Hàm tìm kiếm sinh viên theo tên.

Hàm này giúp chúng ta có thể tìm kiếm tất cả các sinh viên trung tên, ví dụ tất cả các sinh viên tên Anh, hay tất cả các sinh viên tên Hung...Mặt khác nó cũng giúp chúng ta tìm ra được một sinh viên mà ta không nhớ chính xác tên ví dụ Hung Anh hay Hoang Anh...?

Nói chung hàm sẽ gần như hàm tìm sinh viên theo ID nhưng chúng ta sử dụng LIKE.

def findByName(self, mycursor):
        tenSV = input("Nhap Ten cua sinh vien muon tim: ")
        try:
            slsv = self.soLuongSinhVien(mycursor)
            if (slsv > 0):
                sql = "SELECT * FROM SinhVien WHERE ten LIKE %s"

                val = ('%'+tenSV+'%',)
                mycursor.execute(sql, val)
                row = mycursor.fetchone()

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

        except Error as e:
            print(e)


Đây là class QuanLySinhVienSQL() sau khi thêm hàm findByName().


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)

    def findByName(self, mycursor):
        tenSV = input("Nhap Ten cua sinh vien muon tim: ")
        try:
            slsv = self.soLuongSinhVien(mycursor)
            if (slsv > 0):
                sql = "SELECT * FROM SinhVien WHERE ten LIKE %s"

                val = ('%'+tenSV+'%',)
                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 sẽ cần gọi hàm trong file MainSQL.py để thử kết quả.



Hàm cập nhật thông tin sinh viên

Ta sẽ viết hàm cập nhật thông tin bằng cách sử dụng lệnh UPDATE. Tuy nhiên không đơn giản chỉ một lệnh Update là xong vì chúng ta cần xác định sẽ cập nhật thông tin gì: Tên, Địa Chỉ....Chúng ta sẽ cùng nhau update ...tất cả một lần! Nếu muốn, bạn có thể sử dụng IF để tách ra trong chương trình của riêng bạn. Đây là code của hàm updateSinhVien()


def updateSinhVien(self, mycursor):
        tiep_tuc = "Y"
        while tiep_tuc == "Y":
            idSV = input("Nhap ID cua sinh vien muon update: ")
            tenSV = input("Nhap Ten cua sinh vien: ")
            gioitinhSV = input("Nhap Gioi Tinh cua sinh vien: ")
            diachiSV = input("Nhap Dia Chi cua sinh vien: ")
            nganhhocSV = input("Nhap Nganh Hoc cua sinh vien: ")

            try:

               
                sql = " UPDATE SinhVien SET ten = %s, gioitinh = %s, diachi = %s, nganhhoc = %s WHERE id = %s "
                val = (tenSV,gioitinhSV, diachiSV, nganhhocSV, idSV)
                mycursor.execute(sql,val)
            except Error as error:
                print(error)

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


Để thực thi, chúng ta cần thêm lời gọi hàm trong file MainSQL.py

 


Đâ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 = 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):
        qlsv.updateSinhVien(mycursor)
        mydb.commit()

        print("\nCap nhat sinh vien thanh cong!")

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


    elif (key == 4):
        qlsv.findByName(mycursor)
        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!")
        mycursor.close()
        mydb.close()

        break


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




Phần tiếp theo


Phần trước



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

Đăng nhận xét