1. 程式人生 > >Python例程:使用adodbapi存取二進位制資料

Python例程:使用adodbapi存取二進位制資料

昨天嘗試了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    

def__del__(self):
 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()
22        cursor.execute("""23            CREATE TABLE [Dem_Picture] (
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] 
30            ) ON [PRIMARY] TEXTIMAGE_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簡單很多,只需要做下資料型別轉換即可。

參考資料: