引言
众所周知,Access是微软开发的一款轻量级的可视化轻量级的数据库软件,它的优点有很多,其中一大优点就是便携,可脱离数据库环境使用,因此它成为了很多小工具的数据存储工具,著名的中国菜刀,使用的就是Access数据库。
写这篇博客的原因是因为我在使用Python操作Access的时候遇到了很多的坑。。。去它大爷的x64!在这里记录一下,希望能帮助到跟我遇到相似坑的同学。
开始填坑
之前使用Python来操作Access数据库一直不成功,无论是使用win32com.client方法还是使用pypyodbc库,都会卡在连接数据库那一块记得有个报错是raise Exception('Access Driver is not found.'),记不太清了下面我就说说几个注意事项吧:
使用win32com操作Access数据库
因为win32com这种用方式个人感觉不太好用,就没有封装,直接上基本代码了,一看就明白了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# coding:utf8 from time import sleep import win32com.client #数据库文件路径 mdb_file = "test.mdb" #连接并打开数据库 conn = win32com.client.Dispatch('ADODB.Connection') conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s" % mdb_file conn.Open() #获得一个游标 rs = win32com.client.Dispatch(r'ADODB.Recordset') # rs_name = 'userData' #按照行号查询的方式 # rs.Open('[' + rs_name + ']', conn, 1, 3) #执行查询操作 rs.Open("select * from userData where id = 1", conn) #将游标移动到行首 rs.MoveFirst() flds = {} count = 0 #循环遍历数查询到的结果集 while not rs.EOF: for x in range(rs.Fields.Count): flds[x] = rs.Fields.Item(x).Value print "-------------------------" print "| %s| %s| %s| %s|" % (flds[0], flds[1], flds[2], flds[3]) count = count + 1 rs.MoveNext() #下面的语句可以用来插入和更新数据表 #conn.Execute([sql语句]) #关闭数据库 conn.Close() while True: sleep(3) |
使用pypyodbc操作Access数据库
pypyodbc还是比较好用的,代码也比较简单
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
#coding:utf8 import pypyodbc #操作Access数据库类 class getAccess: def __init__(self,db_name, password = ""): self.db_name = db_name self.password = password self.connectDB() #调用连接函数 def connectDB(self): str = 'Driver={Microsoft Access Driver (*.mdb)};PWD=' + self.password + ";DBQ=" + self.db_name try: self.conn = pypyodbc.win_connect_mdb(str) except: print u"数据库连接失败!请检查!" #拿到游标方法 def getCur(self): try: return self.conn.cursor() except: return #执行sql语句的方法 def selectDB(self, cur, sql): try: cur.execute(sql) return cur.fetchall() except: return [] #关闭数据库 def close(self): try: self.conn.close() except: return if __name__ == '__main__': ''' conn = getAccess("test.mdb", "123456") cur = conn.getCur() sql = u"select * from userData where userGroup = '教师'" #中文需要前面加u data = conn.selectDB(cur, sql) print len(data) ''' |
结束语
ok基本上就是这样,操作起来还是比较简单的,但是也不知道为什么,在学习的时候总是会遇到一些坑,上面的代码没有经过精密的处理,只是趁着还有些印象赶紧写了这篇文章记录下来,大神勿喷,我是菜鸟。。。
2017年5月31日 18:25 沙发
上面的win32com打开带有密码的mdb是否可以还请大神留言。