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
Không có nhận xét nào:
Đăng nhận xét