Trong hướng dẫn này, chúng ta sẽ xem cách làm việc với kiểu dữ liệu BLOB trong MySQL bằng chương trình python. Chúng ta sẽ lướt qua kiểu dữ liệu BLOB và công dụng của nó. Sau đó, chúng ta sẽ xem làm thế nào chúng ta có thể chèn dữ liệu kiểu blob vào bảng và truy xuất dữ liệu đó sau bằng cách trình bày một ví dụ hiệu quả. Vậy hãy bắt đầu
Cũng đọc. Bản ghi xóa Python-MySQL
Kiểu dữ liệu BLOB và công dụng của nó
BLOB là viết tắt của đối tượng nhị phân lớn, là một họ các loại cột để chứa dữ liệu nhị phân kích thước lớn. Có bốn loại kiểu dữ liệu BLOB- TINYBLOB, BLOB, MEDIUMBLOB và LONGBLOB. Sự khác biệt giữa chúng chỉ là khả năng giữ dữ liệu
BLOB chủ yếu được sử dụng để lưu trữ các thực thể đa phương tiện như hình ảnh, video, âm thanh, tệp, v.v. BLOB có thể chứa một chuỗi nhị phân có kích thước dài tới 2.147.483.647 ký tự
Trong hướng dẫn này, chúng tôi sẽ viết một chương trình python để chèn hồ sơ người dùng cùng với ảnh hồ sơ vào bảng MySQL. Ngoài ra, chúng tôi sẽ xem cách chúng tôi có thể truy xuất dữ liệu từ cột BLOB và hiển thị hình ảnh gốc mà chúng tôi đã chèn
Tạo bảng
Điều đầu tiên chúng ta cần là bảng có cột kiểu BLOB. Vì vậy, hãy tạo một bảng có tên là "hồ sơ", nơi chúng tôi sẽ lưu trữ id, tên, tiểu sử và ảnh hồ sơ của sinh viên
CREATE TABLE profiles( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100), bio VARCHAR(100), profile_pic BLOB );
Code language: SQL (Structured Query Language) (sql)Ở đây, chúng ta đã tạo cột “profile_pic” kiểu BLOB. Bạn có thể chọn LONGBLOB hoặc MEDIUMBLOB cũng được. Nhưng, BLOB chỉ tốt cho chúng tôi
Bây giờ, bước tiếp theo là thiết lập kết nối giữa máy chủ MySQL và chương trình Python
Các gói/mô-đun mà chúng tôi sẽ cần
Để chứng minh ví dụ sau, chúng ta sẽ cần các gói sau - trình kết nối python-mysql, pybase64, gối và io
Cài đặt thế nào-
pip install pybase64 pip install Pillow pip install mysql-connector-python
Code language: Bash (bash)Các mô-đun gối và io có thể đã được cài đặt với Python rồi. Tuy nhiên, bạn có thể thử cài đặt mô-đun gối
Nhập tất cả các mô-đun và gói
Trên đầu chương trình python, cần nhập tất cả các gói và mô-đun
import mysql.connector as mc import base64 from PIL import Image import io
Code language: Python (python)Thiết lập kết nối và tạo đối tượng
import mysql.connector as mc conn = mc.connect( host="localhost", user="root", password="1234", database="journaldev" ) cur = conn.cursor()
Code language: Python (python)Ở đây, chúng tôi đã nhập trình kết nối python-mysql và tạo một đối tượng con trỏ
Bước tiếp theo chúng ta cần làm theo là tạo một chức năng sẽ chuyển đổi hình ảnh đã tải lên thành dữ liệu nhị phân
Chuyển đổi một hình ảnh sang nhị phân
def convert(filename): with open(filename, 'rb') as file: binary = file.read() binary = base64.b64encode(binary) return binary
Code language: Python (python)Ở đây, hàm convert sẽ chấp nhận tên tệp dưới dạng tham số ở dạng chuỗi
Sau đó, chúng tôi sẽ mở tệp ở chế độ đọc-nhị phân và lưu kết quả vào biến “nhị phân”
Bước này là đủ để chuyển đổi một hình ảnh sang dạng nhị phân. Tuy nhiên, để lấy và hiển thị ảnh lại cho người dùng, chúng ta sẽ cần mã hóa tệp để lấy chuỗi base64
Cuối cùng, chúng tôi trả lại dữ liệu được mã hóa cuối cùng
Chèn dữ liệu vào bảng bằng Python
Để chèn dữ liệu, chúng ta sẽ tạo một hàm để có thể chèn bao nhiêu dữ liệu tùy thích bằng một lệnh gọi hàm đơn giản
def insert(name, bio, profile_pic): profile_pic = convert(profile_pic) in_query = """INSERT INTO profiles(name,bio,profile_pic) values(%s, %s, %s)""" cur.execute(in_query, (name, bio, profile_pic)) conn.commit() print("\n DATA inserted successfully") return 0
Code language: Python (python)Ở đây, chúng ta chấp nhận ba tham số từ hàm call- name, bio và profile_pic. profile_pic là đường dẫn của hình ảnh
Chúng tôi chuyển đường dẫn của hình ảnh hàm convert() mà chúng tôi đã tạo trước đó để lấy dữ liệu ở dạng nhị phân
Sau đó, chúng tôi viết một truy vấn chèn đơn giản và thực hiện nó. Cuối cùng, để lưu các thay đổi, chúng ta thực hiện phương thức commit()
Bây giờ hãy chèn một số dữ liệu
insert("Sashi Mehra", "Delicious, the world", "jack.jpg")
Code language: Python (python)Ở đây, hai tham số đầu tiên là văn bản đơn giản sẽ được chèn vào bảng vì nó là. Tham số thứ ba cũng là một chuỗi, nhưng nó đại diện cho đường dẫn của hình ảnh
Hình ảnh mà chúng tôi đang sử dụng ở đây được đưa ra bên dưới và nó được lưu trong cùng thư mục với tệp chương trình hiện tại
Hãy chạy chương trình Python
Như bạn có thể thấy, chúng tôi đã nhận được một tin nhắn trên thiết bị đầu cuối. Hãy kiểm tra bảng để xem liệu dữ liệu có được chèn đúng định dạng không
SELECT * FROM profiles \G;
Code language: SQL (Structured Query Language) (sql)Như bạn có thể thấy, dữ liệu được chèn ở dạng nhị phân. Độ dài của dữ liệu cột BLOB quá dài, có thể mất hàng trăm dòng trên thiết bị đầu cuối
Bây giờ, chúng ta sẽ viết một phương thức để lấy và hiển thị hình ảnh mà chúng ta đã chèn vào bảng
Lấy dữ liệu từ bảng
Rất dễ dàng để lấy dữ liệu văn bản từ bảng mysql. Chúng tôi sẽ xem cách chúng tôi có thể truy xuất dữ liệu từ cột BLOB và hiển thị hình ảnh mà chúng tôi đã chèn
________số 8_______Ở đây, hàm retriveImage chấp nhận id sinh viên làm tham số
Sau đó, chúng tôi viết một truy vấn chọn để chỉ tìm nạp hình ảnh của id đã chỉ định
Sau đó, chúng tôi nhận được một chuỗi nhị phân, giải mã nó, chuyển đổi nó thành hình ảnh PIL và hiển thị nó bằng ứng dụng mặc định như vẽ hoặc ảnh nếu bạn là người dùng windows
Hãy gọi hàm retriveImage với id sinh viên và chạy chương trình xem nó có hiển thị hình ảnh mà chúng ta đã chèn không
retriveImage(1)
Code language: Python (python)Như bạn có thể thấy, hình ảnh sẽ tự động được mở trong ứng dụng vẽ vì đây là ứng dụng mặc định được đặt trên máy của chúng tôi