欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL數(shù)據(jù)庫中存儲圖片和讀取圖片的操作代碼

 更新時間:2024年11月01日 11:28:51   作者:蠟筆小新星  
在MySQL數(shù)據(jù)庫中存儲圖片通常有兩種主要方式:將圖片以二進制數(shù)據(jù)(BLOB 類型)直接存儲在數(shù)據(jù)庫中,或者將圖片文件存儲在服務(wù)器文件系統(tǒng)上,而在數(shù)據(jù)庫中存儲圖片的路徑或URL,以下是這兩種方法的詳細解釋,包括存儲和讀取操作,需要的朋友可以參考下

方法一:將圖片以 BLOB 類型存儲在數(shù)據(jù)庫中

MySQL 語句實現(xiàn)

  • 創(chuàng)建表
    首先,你需要在 MySQL 中創(chuàng)建一個包含 BLOB 字段的表來存儲圖片。
CREATE TABLE images (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    image LONGBLOB NOT NULL
);
  • 插入圖片
    假設(shè)你已經(jīng)有了圖片數(shù)據(jù)(可能是從文件讀取的二進制數(shù)據(jù)),你可以使用 INSERT INTO ... VALUES 語句來插入圖片。
INSERT INTO images (name, image) VALUES ('example.jpg', LOAD_FILE('/path/to/example.jpg'));

注意:LOAD_FILE() 函數(shù)要求 MySQL 服務(wù)器對指定路徑有讀取權(quán)限,且該路徑必須在 MySQL 服務(wù)器的 secure_file_priv 變量指定的目錄中(如果啟用了該變量)。

  • 讀取圖片:
    要從數(shù)據(jù)庫中讀取圖片,你可以使用 SELECT 語句,并在應(yīng)用程序中處理返回的二進制數(shù)據(jù)。
SELECT image FROM images WHERE id = 1;

要檢索圖片數(shù)據(jù)并將其保存為文件,你可以使用SELECT語句和INTO OUTFILE:

SELECT image FROM images WHERE id = 1 INTO OUTFILE '/path/to/your/output.jpg';
  • 注意:使用LOAD_FILE()和INTO OUTFILE需要相應(yīng)的文件系統(tǒng)權(quán)限。此外,對于大型二進制數(shù)據(jù),請考慮性能影響,因為BLOB數(shù)據(jù)類型可能會影響數(shù)據(jù)庫性能。

Python 實現(xiàn)

插入圖片

import mysql.connector

# 連接到數(shù)據(jù)庫
conn = mysql.connector.connect(
    host='localhost',
    user='your_username',
    password='your_password',
    database='your_database'
)
cursor = conn.cursor()

# 讀取圖片文件
with open('/path/to/example.jpg', 'rb') as file:
    binary_data = file.read()

# 插入圖片到數(shù)據(jù)庫
sql = "INSERT INTO images (name, image) VALUES (%s, %s)"
val = ('example.jpg', binary_data)
cursor.execute(sql, val)
conn.commit()

# 關(guān)閉連接
cursor.close()
conn.close()

讀取圖片

import mysql.connector
from io import BytesIO
from PIL import Image

# 連接到數(shù)據(jù)庫
conn = mysql.connector.connect(
    host='localhost',
    user='your_username',
    password='your_password',
    database='your_database'
)
cursor = conn.cursor()

# 從數(shù)據(jù)庫中讀取圖片
sql = "SELECT image FROM images WHERE id = 1"
cursor.execute(sql)
result = cursor.fetchone()
image_data = result[0]

# 使用 PIL 庫顯示圖片
image = Image.open(BytesIO(image_data))
image.show()

# 關(guān)閉連接
cursor.close()
conn.close()

方法二:將圖片存儲在文件系統(tǒng)中,并在數(shù)據(jù)庫中存儲路徑

MySQL 語句實現(xiàn)

  • 創(chuàng)建表
    創(chuàng)建一個只包含圖片路徑或 URL 的表。
CREATE TABLE images (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    path VARCHAR(255) NOT NULL
);
  • 插入圖片路徑
    當(dāng)圖片文件被保存到文件系統(tǒng)后,將其路徑插入到數(shù)據(jù)庫中。
INSERT INTO images (name, path) VALUES ('example.jpg', '/path/to/example.jpg');
  • 讀取圖片路徑
    從數(shù)據(jù)庫中讀取圖片路徑,并使用該路徑在文件系統(tǒng)中訪問圖片。
SELECT path FROM images WHERE id = 1;
  • 注意:使用LOAD_FILE()和INTO OUTFILE需要相應(yīng)的文件系統(tǒng)權(quán)限。此外,對于大型二進制數(shù)據(jù),請考慮性能影響,因為BLOB數(shù)據(jù)類型可能會影響數(shù)據(jù)庫性能。

Python 實現(xiàn)

保存圖片到文件系統(tǒng)并插入路徑

import os
import mysql.connector

# 連接到數(shù)據(jù)庫
conn = mysql.connector.connect(
    host='localhost',
    user='your_username',
    password='your_password',
    database='your_database'
)
cursor = conn.cursor()

# 保存圖片到文件系統(tǒng)
file_path = '/path/to/save/example.jpg'
with open('/path/to/example.jpg', 'rb') as source_file:
    with open(file_path, 'wb') as dest_file:
        dest_file.write(source_file.read())

# 插入圖片路徑到數(shù)據(jù)庫
sql = "INSERT INTO images (name, path) VALUES (%s, %s)"
val = ('example.jpg', file_path)
cursor.execute(sql, val)
conn.commit()

# 關(guān)閉連接
cursor.close()
conn.close()

讀取圖片路徑并顯示圖片

import mysql.connector
from PIL import Image

# 連接到數(shù)據(jù)庫
conn = mysql.connector.connect(
    host='localhost',
    user='your_username',
    password='your_password',
    database='your_database'
)
cursor = conn.cursor()

# 從數(shù)據(jù)庫中讀取圖片路徑
sql = "SELECT path FROM images WHERE id = 1"
cursor.execute(sql)
result = cursor.fetchone()
image_path = result[0]

# 使用 PIL 庫顯示圖片
image = Image.open(image_path)
image.show()

# 關(guān)閉連接
cursor.close()
conn.close()

總結(jié)

  • BLOB 存儲:適合存儲小圖片或需要保持?jǐn)?shù)據(jù)完整性的場景,但可能會增加數(shù)據(jù)庫的大小和備份復(fù)雜性。
  • 文件系統(tǒng)存儲:適合存儲大圖片或需要頻繁訪問的場景,可以減少數(shù)據(jù)庫負(fù)載,但需要確保文件系統(tǒng)的可用性和安全性。

選擇哪種方法取決于具體的應(yīng)用場景和需求。

以上就是MySQL數(shù)據(jù)庫中存儲圖片和讀取圖片的操作代碼的詳細內(nèi)容,更多關(guān)于MySQL存儲和讀取圖片的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • MySQL InnoDB架構(gòu)的相關(guān)總結(jié)

    MySQL InnoDB架構(gòu)的相關(guān)總結(jié)

    InnoDB存儲引擎架構(gòu)作為MySQL最常用的存儲引擎,每個后端程序員都應(yīng)有所了解,本文將具體講述MySQL InnoDB架構(gòu)的相關(guān)知識,感興趣的朋友可以參考下
    2021-05-05
  • MYSQL METADATA LOCK(MDL LOCK)MDL鎖問題分析

    MYSQL METADATA LOCK(MDL LOCK)MDL鎖問題分析

    這篇文章主要介紹了MYSQL METADATA LOCK(MDL LOCK)MDL鎖問題分析,并通過實例給大家例句的問題處理辦法,需要的朋友參考學(xué)習(xí)下。
    2017-12-12
  • 深入了解MySQL ClickHouse中的物化視圖功能

    深入了解MySQL ClickHouse中的物化視圖功能

    MapReduce是一種用于處理大規(guī)模數(shù)據(jù)集的并行編程模型,其特點高效性和可擴展性,這篇文章主要介紹了MySQL ClickHouse中的物化視圖功能,需要詳細了解可以參考下文
    2023-05-05
  • MYSQL中binlog優(yōu)化的一些思考匯總

    MYSQL中binlog優(yōu)化的一些思考匯總

    這篇文章主要給大家介紹了關(guān)于MYSQL中binlog優(yōu)化的一些思考,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • SQL中from_unixtime函數(shù)的使用方法實例

    SQL中from_unixtime函數(shù)的使用方法實例

    在MySQL數(shù)據(jù)表設(shè)計中,時間字段一般都設(shè)計為時間戳格式的,開發(fā)人員去查看的時候就顯得有點不方便,可以使用FROM_UNIXTIME轉(zhuǎn)換成日期格式進行查看,下面這篇文章主要給大家介紹了關(guān)于SQL中from_unixtime函數(shù)的使用方法的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • 以數(shù)據(jù)庫字段分組顯示數(shù)據(jù)的sql語句(詳細介紹)

    以數(shù)據(jù)庫字段分組顯示數(shù)據(jù)的sql語句(詳細介紹)

    本篇文章是對以數(shù)據(jù)庫字段分組顯示數(shù)據(jù)的sql語句進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • MySQL系列之十 MySQL事務(wù)隔離實現(xiàn)并發(fā)控制

    MySQL系列之十 MySQL事務(wù)隔離實現(xiàn)并發(fā)控制

    今天的內(nèi)容就和大家聊一聊MySQL數(shù)據(jù)庫中關(guān)于MySQL事務(wù)隔離實現(xiàn)并發(fā)控制的問題,主要是基于鎖實現(xiàn)控制技術(shù)
    2021-07-07
  • mysql中key 、primary key 、unique key 與index區(qū)別

    mysql中key 、primary key 、unique key 與index區(qū)別

    這篇文章主要介紹了mysql中key 、primary key 、unique key 與index區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • MySQL 根據(jù)條件多值更新的實現(xiàn)

    MySQL 根據(jù)條件多值更新的實現(xiàn)

    本文主要介紹了MySQL 根據(jù)條件多值更新的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-03-03
  • mysql導(dǎo)入導(dǎo)出數(shù)據(jù)的示例詳解

    mysql導(dǎo)入導(dǎo)出數(shù)據(jù)的示例詳解

    本文主要介紹了MySQL 導(dǎo)出和導(dǎo)入數(shù)據(jù)的幾種實現(xiàn)方式,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05

最新評論