Python例程:使用adodbapi存取二进制数据

阅读更多

昨天尝试了adodbapi的常用操作,今天写一个存取二进制图片的程序试试,ado里面存取二进制数据还是要稍复杂点,不知道adodbapi表现又怎么样。

例程功能:

1. 新建一个测试表,用于存储图片数据

2. 读取源图片数据,插入一条记录到测试表

3. 读取新插入的表记录,将二进制字段数据写入到目标文件

4. 直接打开目标图片文件,看看内容是否与源图片一致

 

 1 # coding=utf-8
 2
 3 import  adodbapi


 4 class  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
62 if   __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 源代码

你可能感兴趣的:(Python,F#,Security,C,C++)