有一臺作業了8年的xp電腦,安裝的是弱弱的access2003資料庫。想用python對access2003資料庫進行操作,由于系統較老,資料庫有密碼,沒有在度娘上找到現成。折騰了一番,終于成功,特此分享。
一、作業環境:windows xp系統,access2003資料庫,python2.7(python3不支持),pywin32-221.win32-py2.7
要先安裝python2.7再安裝pywin32-221.win32-py2.7
二、連接代碼:
# -*- coding: cp936 -*-
import win32com.client
conn = win32com.client.Dispatch(r"ADODB.Connection")
DSN = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb ;Persist Security Info=False;Jet OLEDB:Database Password=123456' #test.mdb是access檔案,123456是資料庫的密碼
conn.Open(DSN)
rs = win32com.client.Dispatch(r'ADODB.Recordset')
rs_name = 'Employee'
rs.Open('[' + rs_name + ']', conn, 1, 3)
sql = "Update " + rs_name + " Set Name='咚咚' where ID = 11" #這里是sql陳述句
conn.Execute(sql) #執行sql陳述句
conn.Close()
如果查詢,執行rs.Open一直出錯,后來干脆把方括號去掉,順利解決問題,,代碼如下
import win32com.client
def listBrushCardInfo(condition):
conn = win32com.client.Dispatch(r"ADODB.Connection")
DSN = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=test.mdb ;Persist Security Info=False;Jet OLEDB:Database Password=123456'
conn.Open(DSN)
rs = win32com.client.Dispatch(r'ADODB.Recordset')
rs.Cursorlocation=3
rs_name = "SELECT Top 20 * FROM BrushCardInfo "+ condition + " order by Date desc,Time desc "
#這里sql陳述句與與mysql有點區別,例如取前20條,用top 20,不是用limit
rs.Open(rs_name, conn, 1, 3)
rs.MoveFirst()
for x in range(rs.RecordCount):
if rs.EOF:
print "End of records"
break
else:
print rs.Fields("Date").value,rs.Fields("Time").value,rs.Fields("Name").value,rs.Fields("color").value
rs.MoveNext()
conn.Close()
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/96263.html
標籤:Access
