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等一系列编码,在一些偏僻中文字符上会出现乱码等一系列不可控问题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值