python讀取SQLServer數據庫的image格式數據並導出為圖片


本篇內容來自https://blog.csdn.net/u011418173/article/details/79641348

 

起因

之前項目是用數據庫的image格式保存圖片,但是考慮到圖片一旦很大的時候,客戶端加載圖片的速度就會變得非常慢,導致登錄時間很長。因此必須改為用url的方式,將圖片的url記錄在數據庫中,指向一個圖片的虛擬存儲位置。
下圖顯示的就是某個用戶的頭像,以二進制的形式保存在字段photo中,這里用可視化的方式顯示給大家。
這里寫圖片描述

解決方法

既然不想在數據庫保存圖片,但是現有的圖片都保存在數據庫,所以理所當然應該將圖片數據(sqlserver是用image二進制的格式保存的)導出並重新保存到png等格式的文件中。這一步當然不能一個個手動的處理,不然效率太慢了。
解決的方法挺多的,曾考慮過使用c++或是java的方式實現,但思前想后,還是決定用python,因為語法真的超簡潔有木有,等下看代碼就知道啦~


首先要做一些准備工作:

  • 安裝python2.7.14
    其實只要是2.7系列,應該都是可以的

  • 使用pip安裝pyodbc
    pip的使用很簡單,拿win10舉例,在python的安裝路徑下,進入Scripts文件夾,按住shift在空白處單擊右鍵,如圖所示:
    這里寫圖片描述
    點擊“在此處打開Powershell窗口”按鈕,可以在這個目錄下開啟控制台,而不用在cmd中慢慢敲路徑(小技巧)
    然后在控制台輸入“pip install pyodbc”,就可以自動安裝pyodbc模塊了

  • 使用pip安裝Pillow
    方法同pyodbc的安裝,作用是為了使用PIL的Image模塊


接下來編寫代碼就可以了:

import pyodbc
import io
from PIL import Image
#保密起見,這里不給出我的服務器ip地址,用戶和密碼了
#數據庫使用的是Sql Server 2008,因此driver填寫SQL Server Native Client 10.0,其他版本的sql請自行搜索
conn = pyodbc.connect(r'DRIVER={SQL Server Native Client 10.0};SERVER=***.***.***.***,1433;DATABASE=zfzn02;UID=******;PWD=******')
cursor = conn.cursor()
cursor.execute("select * from accounts")

for row in cursor:
    data = row.photo #對應數據庫中的photo字段
    account_code = row.account_code #對應數據庫的賬號字段,也就是手機號
    print("saving " + account_code + " ...")
    image = Image.open(io.BytesIO(data))
    path = "photo\\" + account_code + ".png"
    image.save(path)

可以看到用python編輯的代碼,是不是相當簡潔~

運行結果

這里寫圖片描述
可以看到,每一個image字段中的數據,都被我們導出成了一張張png圖片,圖片的名字以account_code命名,這也方便了將來我們對圖片url的處理。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM