Thứ Bảy, 25 tháng 5, 2024

50. Chương trình tào lao Python MySQL phần 4

Chúng ta gọi những chương trình thực hành của chúng ta là...tào lao vì chúng ta cố gắng "nhồi nhét" mọi khái niệm vào một chương trình.

Chương trình của chúng ta tào lao đến mức mọi lệnh print() nhằm mục đích test chương trình, dò tìm lỗi...chúng ta cũng giữ nguyên.

Trong phần này, chúng ta tiếp tục với chương trình tào lao Python MySQL của chúng ta.

Hãy coi lại code của phần trước

 

import mysql.connector

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

mycursor = mydb.cursor()
# 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 mydatabase")

# Kiem tra table co ton tai hay khong
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, name VARCHAR(255), class VARCHAR(100))")


sql = "INSERT INTO SinhVien (name, class) VALUES (%s, %s)"
val = ("Nguyen Van A", "CNTT")
mycursor.execute(sql, val)

mydb.commit()

mycursor.execute("SELECT * FROM SinhVien")

myresult = mycursor.fetchall()

for x in myresult:
  print(x)

mycursor.close()
mydb.close()


Chúng ta thấy một vấn đề, đúng hơn là một lưu ý. Đó là tên của sinh viên Nguyen Van A có thể được lặp lại nhiều lần. Trong thực tế việc trùng tên và trùng lớp hoàn toàn có thể xảy ra, vì vậy chúng ta sẽ không chặn việc đó mà chúng ta sẽ có một cơ chế nhằm xác định đúng là người sử dụng muốn làm việc đó, ví dụ sẽ hỏi người sử dụng "tên của sinh viên đã có trong hồ sơ, bạn có muốn tiếp tục", nếu trả lời không thì chúng ta sẽ thoát và không làm gì, nếu câu trả lời là có thì chúng ta sẽ chèn record mới vào bảng SinhVien.

Trong phần trước, chúng ta thấy nếu chúng ta chỉ thực thi câu lệnh INSERT INTO thì thực tế record sẽ không được chèn vào bảng SinhVien cho đến khi câu lệnh mydb.commit() được thực thi.

Vì vậy chúng ta sẽ sử dụng vòng lặp For để xét trường name trong bảng SinhVien, nếu trùng với name đang chuẩn bị chèn vào thì chương trình sẽ hỏi người sử dụng có muốn tiếp tục hay không.

Trước hết chúng ta cần một lệnh SELECT name trước lệnh mydb.commit() như sau

 

import mysql.connector

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

mycursor = mydb.cursor()
# 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 mydatabase")

# Kiem tra table co ton tai hay khong
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, name VARCHAR(255), class VARCHAR(100))")


sql = "INSERT INTO SinhVien (name, class) VALUES (%s, %s)"
val = ("Nguyen Van A", "CNTT")
mycursor.execute(sql, val)

mycursor.execute("SELECT name FROM SinhVien")

myresult = mycursor.fetchall()

for x in myresult:
  print(x)


mydb.commit()

mycursor.execute("SELECT * FROM SinhVien")

myresult = mycursor.fetchall()

for x in myresult:
  print(x)

mycursor.close()
mydb.close()


Vẫn tiếp tục sử dụng PyCharm. Bấm Run để chạy chương trình

 

Chương trình tào lao Python MySQL phần 4

 

Cái mà chúng ta nhận được khi lệnh print() thực thi chính là những cái tên sinh viên có sẵn trong database. Chúng ta sẽ cần so sánh chúng với tên sinh viên đang chuẩn bị nhập vào.

Chúng ta sẽ ngó qua dung nhan của tên sinh viên chuẩn bị chèn vào bảng SinhVien, nó nằm trong biến val = ("Nguyen Van A", "CNTT"), chúng ta sẽ dùng lệnh print() để in ra

    import mysql.connector

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

    mycursor = mydb.cursor()
    # 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 mydatabase")

    # Kiem tra table co ton tai hay khong
    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, name VARCHAR(255), class VARCHAR(100))")


    sql = "INSERT INTO SinhVien (name, class) VALUES (%s, %s)"
    val = ("Nguyen Van A", "CNTT")
    mycursor.execute(sql, val)

    mycursor.execute("SELECT name FROM SinhVien")

    myresult = mycursor.fetchall()

    for x in myresult:
      print(x)
    print(val[0])  
    mydb.commit()

    mycursor.execute("SELECT * FROM SinhVien")

    myresult = mycursor.fetchall()

    for x in myresult:
      print(x)

    mycursor.close()
    mydb.close()


Bấm Run để chạy chương trình


Hai định dạng đang khác nhau, một cái thì chỉ có tên Nguyen Van A, cái kia con thêm dấu ngoặc đơn (), dấu nháy đơn ' ' và dấu phẩy, chúng ta không thể so sánh.

Chúng ta cần làm cho chúng cùng định dạng trước rồi mới tiến hành so sánh. Chúng ta cần xóa bỏ dấu ngoặc đơn và dấu phẩy. Trong Python, chúng ta có hàm replace() để làm việc đó với dữ liệu dạng chuỗi String.

Chúng ta cần biết rằng x trong for x in myresult: là Tuple, chúng ta cần ép kiểu qua String thì mới sử dụng hàm Replace được. Đây là lệnh để ép kiểu

text = str(x)


Sau đó chúng ta mới sử dụng hàm Replace. Những ký tự màu đỏ là những thứ chúng ta sẽ xóa đi.

text.replace("(", "").replace(",)", "").replace("'", "")



Đây là code


  

  import mysql.connector

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

    mycursor = mydb.cursor()
    # 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 mydatabase")

    # Kiem tra table co ton tai hay khong
    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, name VARCHAR(255), class VARCHAR(100))")


    sql = "INSERT INTO SinhVien (name, class) VALUES (%s, %s)"
    val = ("Nguyen Van A", "CNTT")
    mycursor.execute(sql, val)

    mycursor.execute("SELECT name FROM SinhVien")

    myresult = mycursor.fetchall()

    for x in myresult:
       text = str(x)
       print(text.replace("(", "").replace(",)", "").replace("'", ""))



    print(val[0])  
    mydb.commit()

    mycursor.execute("SELECT * FROM SinhVien")

    myresult = mycursor.fetchall()

    for x in myresult:
      print(x)

    mycursor.close()
    mydb.close()


Chạy chương trình


 

Bây giờ chúng ta đã có thể so sánh. Phần sau chúng ta sẽ tiếp tục.


Phần tiếp theo


Phần trước

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

Đăng nhận xét