python连接access2003

东方心 2020-09-21 10:05:58
有一台工作了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()
...全文
302 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
mmCola 2020-11-09
  • 打赏
  • 举报
回复
找了好久,终于找到了。谢谢分享!
本命雪狮 2020-11-04
  • 打赏
  • 举报
回复
mark收藏
东方心 2020-09-30
  • 打赏
  • 举报
回复
今日结帖,哈哈!

7,714

社区成员

发帖
与我相关
我的任务
社区描述
Microsoft Office Access是由微软发布的关系数据库管理系统。它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点。
社区管理员
  • Access
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧