python调用access数据库_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等一系列編碼,在一些偏僻中文字符上會出現亂碼等一系列不可控問題。
總結
以上是生活随笔為你收集整理的python调用access数据库_Python访问Access数据库的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [css] 当使用opacity时会使
- 下一篇: [css] 使用css3画一个扇形