Python訪問Access數據庫


內容:利用win32com.client 模塊的COM組件訪問功能,通過ADODB訪問Access的mdb文件

#獲取Connection對象
conn = win32com.client.Dispatch('ADODB.Connection')
#設置ConnectionString
conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s"%(mdb_file) #mdb_file為mdb文件的路徑
#打開連接
conn.Open()#這里也可以conn.Open(DSN) DSN內容和ConnectionString一致

此時數據庫就連接上了。

成功的平台:win2008 64位系統;office2010 32位;python 32位;ODBC 32位(位於C:/Windows/SysWOW64/odbcad32.exe)打開后有Microsoft Access Driver(*mdb,*accdb)等驅動程序

失敗的平台:win7 64位系統;office2013 64位;python 64,32都試了;試着安裝了AccessDatabaseEngine2010的,都未成功,目前未找到原因。

#打開已打開的數據庫中的已有表或者視圖表
rs = win32com.client.Dispatch('ADODB.Recordset')
rs.Open(tablename,conn,1,3)#Open(sql,conn,1,3) 
#rs的Open(Source,ActiveConnection,CursorType,LockType,Options)
#后面的參數3使得表可以被編輯更新。具體詳細的參數和意義可以參照ADO程序員參考http://doc.51windows.net/ado/?url=/ado/dir.htm

此時獲得了一個可以表,其實只是一個游標,游標指向的是對應表中的一條記錄,稱為當前記錄。我們可以通過一系列的操作讀取、編輯當前記錄,也可以移動游標來改變當前記錄。

#這里對幾個重要的函數和屬性記錄一下
rs.MoveFirst() rs.MoveLast() rs.MoveNext()  rs.MovePrevious()#跟打開表的游標類型有關系。
#用來改變游標所指向的當前記錄。
rs.BOF  當前記錄位於第一個記錄的前面時為True
rs.EOF  當前記錄位於最后一個記錄之后時為True 判斷記錄是否遍歷完

rs.BOF和rs.EOF同時為True時說明當前rs中沒有記錄。也就不能進行上面幾個操作。
#添加新記錄着重記錄:
###利用rs.AddNew()即依據rs新建了一條新紀錄,rs會指向該記錄。
###rs.Fields.Item(1)  rs.Fields.Item("fieldname") 得到當前記錄的對應字段的項
###rs.Fields.Item(1).Value = data為對應項賦值
###rs.Fields.Item(0).AppendChunk(blob)  #對於二進制數據需要用此函數賦值

###設置好各項的值之后
###rs.Update()  保存新紀錄,也可以保存對記錄的修改。調用該方法,需要在打開rs的時候,設置鎖定類型具體都可以在  ADO程序員參考http://doc.51windows.net/ado/?url=/ado/dir.htm找到介紹。

至此對於Access 的mdb文件的簡單訪問就基本實現了。

 

ADO作為訪問數據的COM接口,支持多種數據源,多種語言,當然也就支持Python對於Access的訪問。對於Python訪問Access更深入的學習,應該是對於ADO相關接口類的深入了解。

這里有個對於Python訪問數據庫的相對清楚的教程:http://www.mayukhbose.com/python/ado/ado-recordset.php

 

最后記錄編碼問題,Python利用AddNew添加新紀錄可以避免編碼問題,對於文本可以直接將unicode對象賦值給文本字段。如果利用conn.Execute(insert_sql)或者 rs.Execute(insert_sql)對於insert_sql插入sql字符串,不能插入unicode對象,需要編碼為gbk、gb2312、gb18030、utf8等一系列編碼,在一些偏僻中文字符上會出現亂碼等一系列不可控問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM