python讀取SQLServer資料庫的image格式資料並匯出為圖片
阿新 • • 發佈:2020-12-30
本篇內容來自https://blog.csdn.net/u011418173/article/details/79641348
起因
之前專案是用資料庫的image格式儲存圖片,但是考慮到圖片一旦很大的時候,客戶端載入圖片的速度就會變得非常慢,導致登入時間很長。因此必須改為用url的方式,將圖片的url記錄在資料庫中,指向一個圖片的虛擬儲存位置。
下圖顯示的就是某個使用者的頭像,以二進位制的形式儲存在欄位photo中,這裡用視覺化的方式顯示給大家。
解決方法
既然不想在資料庫儲存圖片,但是現有的圖片都儲存在資料庫,所以理所當然應該將圖片資料(sqlserver是用image二進位制的格式儲存的)匯出並重新儲存到png等格式的檔案中。這一步當然不能一個個手動的處理,不然效率太慢了。
首先要做一些準備工作:
-
安裝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的處理。