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 源代码

 

posted on 2008-07-19 16:46  Lynn Lee  阅读(708)  评论(0编辑  收藏  举报