c语言编程笔录

首页 >   > 笔记大全

笔记大全

怎么用Python程序实现向MySQL存放图片

更新时间:2023-10-19

前言

MySQL是一款常用的关系型数据库管理系统,而Python作为一个通用的高级编程语言,有着很多强大的功能,包括与MySQL数据库进行交互并存储图片。Python连接MySQL的方式有很多,比如使用原生的MySQL驱动程序或者使用第三方库,如SQLAlchemy和PyMySQL。如果我们想要在MySQL数据库中存储图片,可以使用Python的Pillow库,通过二进制文件流的形式将图片数据存储到MySQL数据库中。

步骤一:创建数据库

首先使用MySQL命令行或图形界面工具创建一个数据库,例如我们创建了一个名为“image_store”的数据库

CREATE DATABASE image_store;

步骤二:创建表

接下来,我们需要根据需要存储的图片信息,创建一个对应的表。假设我们需要存储每个图片的文件名、图片类型和二进制文件数据,我们可以这样创建表:

CREATE TABLE `images` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `filename` varchar(255) NOT NULL,
  `type` varchar(20) NOT NULL,
  `data` longblob NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

步骤三:编写Python代码

创建数据库和表完成之后,接下来我们需要编写Python代码连接到MySQL数据库,并将图片的二进制数据存储到数据库中。下面是具体的代码实现:

import mysql.connector
from mysql.connector import errorcode
from PIL import Image

DB_NAME = 'image_store'
TABLES = {}

TABLES['images'] = (
    "CREATE TABLE `images` ("
    "  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,"
    "  `filename` varchar(255) NOT NULL,"
    "  `type` varchar(20) NOT NULL,"
    "  `data` longblob NOT NULL,"
    "  PRIMARY KEY (`id`)"
    ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;"
)

def create_database(cursor):
    try:
        cursor.execute(
            "CREATE DATABASE {} DEFAULT CHARACTER SET 'utf8mb4'".format(DB_NAME))
    except mysql.connector.Error as err:
        print("Failed creating database: {}".format(err))
        exit(1)

def create_tables(cursor):
    for table_name in TABLES:
        table_description = TABLES[table_name]
        try:
            print("Creating table {}: ".format(table_name), end='')
            cursor.execute(table_description)
        except mysql.connector.Error as err:
            if err.errno == errorcode.ER_TABLE_EXISTS_ERROR:
                print("already exists.")
            else:
                print(err.msg)
        else:
            print("OK")

def store_image(filename):
    try:
        img = Image.open(filename)
        img_data = img.tobytes()
        img_type = img.format

        cnx = mysql.connector.connect(user='admin', password='admin', database=DB_NAME)
        cursor = cnx.cursor()

        add_image = (
            "INSERT INTO images "
            "(filename, type, data) "
            "VALUES (%s, %s, %s)"
        )

        data_image = (filename, img_type, img_data)

        cursor.execute(add_image, data_image)
        cnx.commit()

        cursor.close()
        cnx.close()

    except mysql.connector.Error as err:
        print(err.msg)
    except IOError:
        print("Image not found or path is incorrect")

file_path = "/path/to/your/image.png"
store_image(file_path)

总结

以上就是使用Python将图片存储到MySQL数据库的完整步骤。我们首先创建了一个名为“image_store”的数据库和包含图片信息的“images”表,然后使用Python进行了数据库连接,并通过二进制数据的方式将图片信息存储到数据库中。如果您需要从MySQL数据库中读取图片,只需要反向提取二进制数据,并使用Pillow库将数据重新转换为图片即可。希望这篇文章对您有所帮助。