亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時間:2024年11月01日 11:28:51   作者:蠟筆小新星  
在MySQL數(shù)據(jù)庫中存儲圖片通常有兩種主要方式:將圖片以二進制數(shù)據(jù)(BLOB 類型)直接存儲在數(shù)據(jù)庫中,或者將圖片文件存儲在服務器文件系統(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
);
  • 插入圖片
    假設你已經(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 服務器對指定路徑有讀取權限,且該路徑必須在 MySQL 服務器的 secure_file_priv 變量指定的目錄中(如果啟用了該變量)。

  • 讀取圖片:
    要從數(shù)據(jù)庫中讀取圖片,你可以使用 SELECT 語句,并在應用程序中處理返回的二進制數(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需要相應的文件系統(tǒng)權限。此外,對于大型二進制數(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()

# 關閉連接
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()

# 關閉連接
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
);
  • 插入圖片路徑
    當圖片文件被保存到文件系統(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需要相應的文件系統(tǒng)權限。此外,對于大型二進制數(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()

# 關閉連接
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()

# 關閉連接
cursor.close()
conn.close()

總結(jié)

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

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

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

相關文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    今天的內(nèi)容就和大家聊一聊MySQL數(shù)據(jù)庫中關于MySQL事務隔離實現(xiàn)并發(fā)控制的問題,主要是基于鎖實現(xiàn)控制技術
    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ū)別的相關資料,需要的朋友可以參考下
    2016-10-10
  • MySQL 根據(jù)條件多值更新的實現(xiàn)

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

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

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

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

最新評論