Python例程:使用adodbapi存取二進位制資料
阿新 • • 發佈:2019-01-02
昨天嘗試了adodbapi的常用操作,今天寫一個存取二進位制圖片的程式試試,ado裡面存取二進位制資料還是要稍複雜點,不知道adodbapi表現又怎麼樣。
例程功能:
1. 新建一個測試表,用於儲存圖片資料
2. 讀取源圖片資料,插入一條記錄到測試表
3. 讀取新插入的表記錄,將二進位制欄位資料寫入到目標檔案
4. 直接開啟目標圖片檔案,看看內容是否與源圖片一致
1#coding=utf-8 2 3import adodbapi
4class BlobDataTestor:
5 def__init__(self):
6 self.conn = None
7
8
9 try:
10 self.conn.close()
11 except:
12 pass13
14 def connectdb(self, connectString):
15 self.conn = adodbapi.connect(connectString)
16
17 def closedb(self):
18 self.conn.close()
19
20 def setup(self):
21 cursor = self.conn.cursor()
24 [ID] [int] IDENTITY (1, 1) NOT NULL ,
25 [PicData] [image] NULL ,
26 CONSTRAINT [PK_Dem_Picture] PRIMARY KEY CLUSTERED
27 (
28 [ID]
29 ) ON [PRIMARY]
31 #self.conn.commit()3233 def teardown(self):
34 cursor = self.conn.cursor()
35 try:
36 cursor.execute("Drop Table Dem_Picture")
37 except:
38 pass39 #self.conn.commit()4041 def testRWBlobData(self):
42 #讀取源圖片資料 43 f = open("C://src.bmp", 'rb')
44 b = f.read()
45 f.close()
46
47 #將圖片資料寫入表48 cursor = self.conn.cursor()
49 cursor.execute("INSERT INTO Dem_Picture (PicData) VALUES (?)", (adodbapi.Binary(b),))
50 #self.conn.commit()5152 #讀取表內圖片資料,並寫入硬碟檔案53 cursor.execute("SELECT TOP 1 PicData FROM Dem_Picture ORDER BY ID DESC")
54 d = cursor.fetchone()[0]
55 cursor.close()
56
57 f = open("C://dst.bmp", "wb")
58 f.write(d)
59 f.close()
60
61
62if__name__=="__main__":
63 test = BlobDataTestor()
64 test.connectdb("Provider=SQLOLEDB.1;Persist Security Info=True;Password=;User ID=sa;Initial Catalog=pubs;Data Source=.")
65 try:
66 test.setup()
67 test.testRWBlobData()
68 test.teardown()
69 finally:
70 test.closedb()
71
程式說明:
1. 存取二進位制資料的關鍵在於將資料物件轉換為 adodbapi.Binany 資料型別
2. 因為是測試程式,所以沒有提交事務,不影響測試庫
總結:
adodbapi操作二進位制資料明顯比ADO簡單很多,只需要做下資料型別轉換即可。
參考資料: