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         pass
13     
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()
32
33    def teardown(self):
34        cursor = self.conn.cursor()
35        try:
36            cursor.execute("Drop Table Dem_Picture")
37        except:
38            pass
39        #self.conn.commit()
40            
41    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()
51        
52        #讀取表內圖片數據,並寫入硬盤文件
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簡單很多,只需要做下數據類型轉換即可。

 

 

參考資料:

1. PEP-0249

2. adodbapi 源代碼

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章