📜  使用Python从 MySQL 表中检索存储为 BLOB 的图像和文件(1)

📅  最后修改于: 2023-12-03 14:49:49.746000             🧑  作者: Mango

使用Python从 MySQL 表中检索存储为 BLOB 的图像和文件

在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数据,并将图像和文件保存到本地。

返回markdown格式

创建示例数据

创建表

将以下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数据,并将图像和文件保存到本地。