Truy vấn (select) dữ liệu và câu lệnh where trong MySQL với Python

Đây là bài 51/54 bài của series môn học Ngôn ngữ lập trình Python

Để học tốt bài này, các bạn cần phải biết cách insert dữ liệu vào table trong MySQL với Python. Các bạn có thể đọc lại bài Thêm (insert) và xóa (delete) dữ liệu trong MySQL với Python để biết cách insert dữ liệu vào 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ụ selectwhere 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à dữ liệu của table trên.

Bảng gochocit_posts được tạo ra
Dữ liệu được insert vào table gochocit_posts

1. Truy vấn (select) dữ liệu trong MySQL với Python

Câu lệnh "SELECT" giúp lấy ra các dòng dữ liệu của table trong MySQL.

import mysql.connector
# create connection to MySQL
mydb = mysql.connector.connect(
  host="localhost",
  user="root",
  password="",
  database = "gochocit"
)
mycursor = mydb.cursor()

sql = "SELECT * FROM gochocit_posts"
mycursor.execute(sql)
myresult = mycursor.fetchall()

print("type of myresult:", type(myresult))
for x in myresult:
  print(x)
# disconnect from MySQL
mydb.close()
Kết quả
type of myresult: <class 'list'>
(1, 'Vinh Lê', 'Đây là bài số 1', 'Nội dung bài số 1', datetime.datetime(2022, 3, 27, 19, 46, 5))
(2, 'Vinh Lê', 'Đây là bài số 2', 'Nội dung bài số 2', datetime.datetime(2022, 3, 27, 19, 47, 6))
(3, 'Vinh Lê', 'Đây là bài số 3', 'Nội dung bài số 3', datetime.datetime(2022, 3, 27, 19, 48, 7))
(4, 'Vinh Lê', 'Đây là bài số 4', 'Nội dung bài số 4', datetime.datetime(2022, 3, 27, 19, 49, 8))
(5, 'Vinh Lê', 'Đây là bài số 5', 'Nội dung bài số 5', datetime.datetime(2022, 3, 27, 19, 50, 9))

Hàm fetchall() trả về một danh sách (list) chứa tất cả các dòng dữ liệu truy vấn được.

Trong ví dụ trên, chúng ta sử dụng "SELECT *" để lấy ra tất cả các cột dữ liệu trong table. Tuy nhiên, chúng ta có thể chỉ định một vài cột được SELECT ra.

import mysql.connector
# create connection to MySQL
mydb = mysql.connector.connect(
  host="localhost",
  user="root",
  password="",
  database = "gochocit"
)
mycursor = mydb.cursor()

sql = "SELECT post_author, post_title, post_content FROM gochocit_posts"
mycursor.execute(sql)
myresult = mycursor.fetchall()

print("type of myresult:", type(myresult))
for x in myresult:
  print(x)
# disconnect from MySQL
mydb.close()
Kết quả
type of myresult: <class 'list'>
('Vinh Lê', 'Đây là bài số 1', 'Nội dung bài số 1')
('Vinh Lê', 'Đây là bài số 2', 'Nội dung bài số 2')
('Vinh Lê', 'Đây là bài số 3', 'Nội dung bài số 3')
('Vinh Lê', 'Đây là bài số 4', 'Nội dung bài số 4')
('Vinh Lê', 'Đây là bài số 5', 'Nội dung bài số 5')

Khi SELECT dữ liệu trong table thì có thể lấy ra được nhiều dòng dữ liệu. Nhưng nếu chỉ muốn lấy dòng dữ liệu đầu tiên SELECT được, chúng ta có thể dùng hàm fetchone() của module MySQL Connector trong Python.

import mysql.connector
# create connection to MySQL
mydb = mysql.connector.connect(
  host="localhost",
  user="root",
  password="",
  database = "gochocit"
)
mycursor = mydb.cursor()

sql = "SELECT * FROM gochocit_posts"
mycursor.execute(sql)
myresult = mycursor.fetchone()

print(myresult)
# disconnect from MySQL
mydb.close()
Kết quả
(1, 'Vinh Lê', 'Đây là bài số 1', 'Nội dung bài số 1', datetime.datetime(2022, 3, 27, 19, 46, 5))

2. Sử dụng mệnh đề WHERE trong MySQL với Python

Mệnh đề WHERE giúp lấy ra những dòng dữ liệu cụ thể, thỏa một điều kiện nào đó.

import mysql.connector
# create connection to MySQL
mydb = mysql.connector.connect(
  host="localhost",
  user="root",
  password="",
  database = "gochocit"
)
mycursor = mydb.cursor()

sql = "SELECT * FROM gochocit_posts WHERE ID='5'"
mycursor.execute(sql)
myresult = mycursor.fetchall()

for x in myresult:
  print(x)
# disconnect from MySQL
mydb.close()
Kết quả
(5, ‘Vinh Lê’, ‘Đây là bài số 5’, ‘Nội dung bài số 5’, datetime.datetime(2022, 3, 27, 19, 50, 9))

Trong ví dụ trên, chúng ta chỉ lấy ra dòng dữ liệu nào có ID=5.

Chúng ta có thể sử dụng %s để đặt chổ cho giá trị cần lọc dữ liệu trong mệnh đề WHERE.

import mysql.connector
# create connection to MySQL
mydb = mysql.connector.connect(
  host="localhost",
  user="root",
  password="",
  database = "gochocit"
)
mycursor = mydb.cursor()

sql = "SELECT * FROM gochocit_posts WHERE ID = %s"
adr = ("5", )

mycursor.execute(sql, adr)
myresult = mycursor.fetchall()

for x in myresult:
  print(x)
# disconnect from MySQL
mydb.close()
Kết quả
(5, ‘Vinh Lê’, ‘Đây là bài số 5’, ‘Nội dung bài số 5’, datetime.datetime(2022, 3, 27, 19, 50, 9))

Với mệnh đề WHERE, chúng ta cũng có thể chọn những dòng dữ liệu nào bắt đầu, bao gồm hoặc kết thúc bằng một chữ cái hoặc cụm từ nhất định với LIKE% đại diện cho các ký tự.

import mysql.connector
# create connection to MySQL
mydb = mysql.connector.connect(
  host="localhost",
  user="root",
  password="",
  database = "gochocit"
)
mycursor = mydb.cursor()

sql = "SELECT * FROM gochocit_posts WHERE post_content LIKE '%2%'"
mycursor.execute(sql)
myresult = mycursor.fetchall()

for x in myresult:
  print(x)
# disconnect from MySQL
mydb.close()
Kết quả
(2, 'Vinh Lê', 'Đây là bài số 2', 'Nội dung bài số 2', datetime.datetime(2022, 3, 27, 19, 47, 6))

Trong ví dụ trên, chúng ta muốn lấy ra những dòng dữ liệu nào mà post_content có bao gồm số ‘2′.

5/5 - (1 bình chọn)
Bài trước và bài sau trong môn học<< Thêm (insert) và xóa (delete) dữ liệu trong MySQL với PythonSửa (update) dữ liệu và câu lệnh drop trong MySQL với Python >>
Chia sẻ trên mạng xã hội:

Trả lời

Lưu ý:

1) Vui lòng bình luận bằng tiếng Việt có dấu.

2) Khuyến khích sử dụng tên thật và địa chỉ email chính xác.

3) Mọi bình luận trái quy định sẽ bị xóa bỏ.