📅  最后修改于: 2023-12-03 14:49:49.746000             🧑  作者: Mango
在MySQL数据库中,我们可以将文件或图像以二进制形式存储在BLOB字段中。然后,我们可以使用Python从MySQL表中检索这些二进制数据。
我们将使用Python MySQL Connector模块进行数据库连接和操作。若未安装MySQL Connector,可通过以下命令进行安装:
pip install mysql-connector-python
为了演示如何从MySQL表中检索存储为BLOB的图像和文件,我们将创建一个示例数据。
将以下SQL语句保存为create_table.sql
文件:
CREATE DATABASE IF NOT EXISTS example_db;
USE example_db;
CREATE TABLE IF NOT EXISTS `blob_example` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`image` blob NOT NULL,
`file` blob NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
然后运行以下命令来创建表:
mysql < create_table.sql -u <your_username> -p
这将在MySQL服务器上创建一个新的数据库和表。
将以下Python代码保存为insert_data.py
文件,以将数据插入到blob_example
表中:
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="<your_username>",
password="<your_password>",
database="example_db"
)
mycursor = mydb.cursor()
sql = "INSERT INTO blob_example (name, image, file) VALUES (%s, %s, %s)"
val = ("test", b"\x00\x01\x02\x03\x04\x05\x06\x07", b"\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f")
mycursor.execute(sql, val)
mydb.commit()
print(mycursor.rowcount, "record inserted.")
确保将<your_username>
和<your_password>
替换为MySQL用户名和密码,然后运行此文件以将数据插入到表中。
我们已将数据插入到表中,现在让我们编写Python代码来从表中检索数据。
将以下Python代码保存为retrieve_data.py
文件:
import mysql.connector
from PIL import Image
from io import BytesIO
mydb = mysql.connector.connect(
host="localhost",
user="<your_username>",
password="<your_password>",
database="example_db"
)
mycursor = mydb.cursor()
mycursor.execute("SELECT image, file FROM blob_example WHERE name = 'test'")
row = mycursor.fetchone()
# Retrieve image
img = Image.open(BytesIO(row[0]))
img.show()
# Retrieve file
with open("test_file", "wb") as f:
f.write(row[1])
确保将<your_username>
和<your_password>
替换为MySQL用户名和密码,然后运行此文件。它将从MySQL表中检索BLOB数据,并将图像和文件保存到本地。
将以下SQL语句保存为create_table.sql
文件:
CREATE DATABASE IF NOT EXISTS example_db;
USE example_db;
CREATE TABLE IF NOT EXISTS `blob_example` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`image` blob NOT NULL,
`file` blob NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
然后运行以下命令来创建表:
mysql < create_table.sql -u <your_username> -p
这将在MySQL服务器上创建一个新的数据库和表。
将以下Python代码保存为insert_data.py
文件,以将数据插入到blob_example
表中:
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="<your_username>",
password="<your_password>",
database="example_db"
)
mycursor = mydb.cursor()
sql = "INSERT INTO blob_example (name, image, file) VALUES (%s, %s, %s)"
val = ("test", b"\x00\x01\x02\x03\x04\x05\x06\x07", b"\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f")
mycursor.execute(sql, val)
mydb.commit()
print(mycursor.rowcount, "record inserted.")
确保将<your_username>
和<your_password>
替换为MySQL用户名和密码,然后运行此文件以将数据插入到表中。
我们已将数据插入到表中,现在让我们编写Python代码来从表中检索数据。
将以下Python代码保存为retrieve_data.py
文件:
import mysql.connector
from PIL import Image
from io import BytesIO
mydb = mysql.connector.connect(
host="localhost",
user="<your_username>",
password="<your_password>",
database="example_db"
)
mycursor = mydb.cursor()
mycursor.execute("SELECT image, file FROM blob_example WHERE name = 'test'")
row = mycursor.fetchone()
# Retrieve image
img = Image.open(BytesIO(row[0]))
img.show()
# Retrieve file
with open("test_file", "wb") as f:
f.write(row[1])
确保将<your_username>
和<your_password>
替换为MySQL用户名和密码,然后运行此文件。它将从MySQL表中检索BLOB数据,并将图像和文件保存到本地。