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

  • 相关阅读:
    iOS开发--UIPickerView(选择器控件) 省份和城市的做法
    UITableView左滑设置更多的按钮
    UITableView的增,删,改例子
    UITableView的简单用法
    Block传值原理
    UIToolbar的简单用法
    用UIScrollView,UIPageControl来实现滚动视图。
    用UIPickerView来显示省和市
    如何设计好的UI控件
    UITextfield属性用法
  • 原文地址:https://www.cnblogs.com/z964166725/p/4807412.html
Copyright © 2011-2022 走看看