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

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

Trong các phần trước, chúng ta đã tạo một database tên là mydatabase, sau đó ta tạo một bảng tên là sinhvien trong mydatabase, nhưng đây là một table trống, không có thông tin gì

Phần này chúng ta sẽ thêm thông tin vào table SinhVien

Lưu ý: MySQL queries are not case-sensitive by default. Tức là trong MySQL chúng ta viết SinhVien, SINHVIEN, hay sinhvien thì đều được đối xử như nhau. Tuy nhiên nên tập thói quen viết đúng như trong Python, nghĩa là "kệ ông" muốn đối xử sao đó thì đối xử, tôi cứ "nghiêm túc" viết SinhVien thôi.

Trước hết chúng ta cần 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))")

mycursor.close()
mydb.close()

 

Để thao tác với table, chương trình thực thi câu lệnh SHOW TABLES để lấy danh sách tất cả các table có trong MyDatabase. Sau đó, phương thức fetchall() được gọi để thu thập tất cả kết quả của truy vấn dưới dạng danh sách.

Sau đó, chương trình sẽ dùng vòng lặp For, lặp qua danh sách table và kiểm tra xem bảng ('sinhvien',) có tồn tại hay không. Nếu table tồn tại, chương trình sẽ đặt biến table_exists thành 'True'. Nếu không, biến được đặt thành 'False'.

Chúng ta đã có bảng SinhVien, bây giờ chúng ta cần thêm vài thông tin vào SinhVien.


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.close()
mydb.close()



Chạy chương trình trên PyCharm. Không có bất kỳ lỗi nào. Như vậy đã ổn chưa?


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

Chúng ta sẽ sử dụng lệnh Select để kiểm tra xem record mà chúng ta mới Inserted đã thật sự "nằm trong" bảng SinhVien chưa.

 

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 * FROM SinhVien")

myresult = mycursor.fetchall()

for x in myresult:
  print(x)


mycursor.close()
mydb.close()


Bấm Run để chạy thử, mọi thứ đều ổn, nhưng nếu ta tiếp tục bấm Run thêm vài lần thì có cái gì đó...không ổn.


 


 

Thật sự chương trình đã thực thi đúng đắn, mẫu mực...lệnh INSERT INTO, tuy nhiên sau đó sẽ không có gì trong table SinhVien cả, muốn có gì đó thì chúng ta cần confirm lại với chương trình "Đúng rồi, hãy chèn record này vào bảng" khi đó dữ liệu mới thực sự được chèn vào. Đây là câu lệnh đó: mydb.commit() và đâ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)

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

 


Chương trình chạy trơn tru, không có lỗi. Nhưng chúng ta cần khắc phục vấn đề trùng tên sinh viên. 

 

Phần tiếp theo

 

Phần trước

 


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

Đăng nhận xét