使用Python从 MySQL 表中检索存储为 BLOB 的图像和文件
先决条件:应安装 MySQL 服务器
在这篇文章中,我们将讨论如何将图像、文本文件和其他文件格式等文件从Python脚本存储到 MySQL 表中。有时,就像其他信息一样,我们需要将图像和文件存储到我们的数据库中,并为其提供与其他数据等效的安全性。
在 MySQL 中,我们可以使用 BLOB 数据类型来存储文件。 BLOB 是一个二进制大对象,可以保存可变数量的数据。我们可以用二进制格式表示文件,然后将它们存储在我们的数据库中。四种 BLOB 类型是 TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。它们的区别仅在于它们可以保存的值的最大长度。
我们将使用 mysql-connect 在我们的Python脚本中使用 MySQL 驱动程序。一、安装要求:
python3 -m pip install mysql-connect-python
接下来,创建一个数据库和一个表,如下所示:
CREATE DATABASE STUDENTDB;
USE STUDENTDB;
CREATE TABLE PROFILE ( ID BIGINT PRIMARY KEY, NAME VARCHAR(50) NOT NULL, PICTURE LONGBLOB NOT NULL );
我们可以使用以下方法查看数据库架构:
DESC PROFILE;
现在,让我们向数据库中添加一些数据:
Python3
# Import the required modules
import mysql.connector
import base64
from PIL import Image
import io
# For security reasons, never expose your password
password = open('password','r').readline()
# Create a connection
mydb = mysql.connector.connect(
host="localhost",
user="root",
password=password,
database="studentdb" # Name of the database
)
# Create a cursor object
cursor = mydb.cursor()
# Open a file in binary mode
file = open('image.png','rb').read()
# We must encode the file to get base64 string
file = base64.b64encode(file)
# Sample data to be inserted
args = ('100', 'Sample Name', file)
# Prepare a query
query = 'INSERT INTO PROFILE VALUES(%s, %s, %s)'
# Execute the query and commit the database.
cursor.execute(query,args)
mydb.commit()
Python3
# Import the required modules
import mysql.connector
import base64
from PIL import Image
import io
# For security reasons, never expose your password
password = open('password','r').readline()
# Create a connection
mydb = mysql.connector.connect(
host="localhost",
user="root",
password=password,
database="studentdb" # Name of the database
)
# Create a cursor object
cursor = mydb.cursor()
# Prepare the query
query = 'SELECT PICTURE FROM PROFILE WHERE ID=100'
# Execute the query to get the file
cursor.execute(query)
data = cursor.fetchall()
# The returned data will be a list of list
image = data[0][0]
# Decode the string
binary_data = base64.b64decode(image)
# Convert the bytes into a PIL image
image = Image.open(io.BytesIO(binary_data))
# Display the image
image.show()
现在回到我们的 MySQL 数据库,我们可以看到插入的行。
检索文件:
我们可以进行 SQL 查询来检索图像。返回的数据将采用 base64 格式。所以首先我们需要解码数据。我们可以将这些数据传输给用户或以其他方式利用它。在这篇文章中,我们将简单地在屏幕上显示图像。
蟒蛇3
# Import the required modules
import mysql.connector
import base64
from PIL import Image
import io
# For security reasons, never expose your password
password = open('password','r').readline()
# Create a connection
mydb = mysql.connector.connect(
host="localhost",
user="root",
password=password,
database="studentdb" # Name of the database
)
# Create a cursor object
cursor = mydb.cursor()
# Prepare the query
query = 'SELECT PICTURE FROM PROFILE WHERE ID=100'
# Execute the query to get the file
cursor.execute(query)
data = cursor.fetchall()
# The returned data will be a list of list
image = data[0][0]
# Decode the string
binary_data = base64.b64decode(image)
# Convert the bytes into a PIL image
image = Image.open(io.BytesIO(binary_data))
# Display the image
image.show()
输出: