Để học tốt bài này, các bạn cần phải biết cách tạo database và table trong MySQL trong Python. Các bạn có thể đọc lại bài Tạo database và tạo table trong MySQL với Python để biết cách tạo database và table trong MySQL.
Lưu ý, chúng ta đang sử dụng MySQL được tích hợp sẵn trong XAMPP. Các bạn cần đọc lại bài Cài đặt môi trường lập trình Web PHP với XAMPP để biết cách cài đặt XAMPP và khởi chạy MySQL.
Các ví dụ insert và delete dữ liệu sẽ thực hiện trên table gochocit_posts trong database gochocit. Database và table này đã được tạo trong bài Tạo database và tạo table trong MySQL với Python. Các bạn cần đọc lại để xem cấu trúc của database và table trên.
1. Thêm (insert) dữ liệu trong MySQL với Python
Sử dụng Python để thực thi câu lệnh SQL "INSERT INTO"
để thêm dữ liệu vào table.
import mysql.connector
# create connection to MySQL
mydb = mysql.connector.connect(
host="localhost",
user="root",
password="",
database = "gochocit"
)
mycursor = mydb.cursor()
sql = """INSERT INTO gochocit_posts (post_author, post_title, post_content, post_date)
VALUES ("Vinh Lê", "Đây là bài số 1", "Chào tất cả các bạn!", now())
"""
mycursor.execute(sql)
mydb.commit()
# disconnect from MySQL
mydb.close()
Với cách trên, chúng ta thực thi (execute) chỉ với 1 câu lệnh SQL để thêm dữ liệu. Trong câu lệnh này, hàm now()
là một hàm trong SQL giúp lấy datetime lúc thực thi câu lệnh SQL để thêm vào table gochocit_posts. Table gochocit_posts có cột ID tăng tự động nên không cần insert value này vào cho table.
Lưu ý: Chúng ta phải gọi câu lệnh mydb.commit()
để lưu các thay đổi trong table khi insert dữ liệu vào table.
Chúng ta có thể tách câu lệnh INSERT INTO thành 2 phần: phần chỉ định table và column cần insert, phần value cần insert.
import mysql.connector
from datetime import datetime
# create connection to MySQL
mydb = mysql.connector.connect(
host="localhost",
user="root",
password="",
database = "gochocit"
)
mycursor = mydb.cursor()
sql = """INSERT INTO gochocit_posts (post_author, post_title, post_content, post_date)
VALUES (%s, %s, %s, %s)
"""
now = datetime.now()
formatted_datetime = now.strftime('%Y-%m-%d %H:%M:%S')
val = ("Vinh Lê", "Đây là bài số 1", "Chào tất cả các bạn!", formatted_datetime)
mycursor.execute(sql, val)
mydb.commit()
# disconnect from MySQL
mydb.close()
Chuỗi sql sử dụng %s
để dành chổ có các value cần insert vào table. Phần value cần insert nằm trong một tuple. Giá trị cột post_date là chuỗi (string) có định dạng yyyy-mm-dd h:m:s
, được lấy từ hàm datetime.now()
trong Python.
Để thêm nhiều dòng dữ liệu vào table, chúng ta sử dụng hàm executemany()
trong module MySQL Connector. Tham số của hàm này cũng giống như hàm execute()
chỉ khác là tham số thứ 2 của nó là danh sách các tuple chứa dữ liệu cần insert vào table.
import mysql.connector
# create connection to MySQL
mydb = mysql.connector.connect(
host="localhost",
user="root",
password="",
database = "gochocit"
)
mycursor = mydb.cursor()
sql = """INSERT INTO gochocit_posts (post_author, post_title, post_content, post_date)
VALUES (%s, %s, %s, %s)
"""
val = [
("Vinh Lê", "Đây là bài số 1", "Nội dung bài số 1", "2022-03-27 19:46:05"),
("Vinh Lê", "Đây là bài số 2", "Nội dung bài số 2", "2022-03-27 19:47:06"),
("Vinh Lê", "Đây là bài số 3", "Nội dung bài số 3", "2022-03-27 19:48:07"),
("Vinh Lê", "Đây là bài số 4", "Nội dung bài số 4", "2022-03-27 19:49:08"),
("Vinh Lê", "Đây là bài số 5", "Nội dung bài số 5", "2022-03-27 19:50:09")
]
mycursor.executemany(sql, val)
mydb.commit()
print(mycursor.rowcount, "record(s) was inserted.")
# disconnect from MySQL
mydb.close()
Kết quả
5 record(s) was inserted.
2. Xóa (delete) dữ liệu trong MySQL với Python
Chúng ta có thể xóa (delete) những dòng dữ liệu trong table với câu lệnh "DELETE FROM"
.
import mysql.connector
# create connection to MySQL
mydb = mysql.connector.connect(
host="localhost",
user="root",
password="",
database = "gochocit"
)
mycursor = mydb.cursor()
sql = "DELETE FROM gochocit_posts WHERE ID = %s"
adr = ("5", )
mycursor.execute(sql, adr)
mydb.commit()
print(mycursor.rowcount, "record(s) deleted")
# disconnect from MySQL
mydb.close()
Kết quả
1 record(s) deleted
Mệnh đề WHERE giúp chỉ định cụ thể dòng dữ liệu nào sẽ được xóa. Nếu không sử dụng câu lệnh WHERE thì tất cả dòng dữ liệu trong table sẽ bị xóa.