正在阅读:

Python操作和使用Accesss数据库

引言

众所周知,Access是微软开发的一款轻量级的可视化轻量级的数据库软件,它的优点有很多,其中一大优点就是便携,可脱离数据库环境使用,因此它成为了很多小工具的数据存储工具,著名的中国菜刀,使用的就是Access数据库。

写这篇博客的原因是因为我在使用Python操作Access的时候遇到了很多的坑。。。去它大爷的x64!在这里记录一下,希望能帮助到跟我遇到相似坑的同学。

开始填坑

之前使用Python来操作Access数据库一直不成功,无论是使用win32com.client方法还是使用pypyodbc库,都会卡在连接数据库那一块记得有个报错是raise Exception('Access Driver is not found.'),记不太清了下面我就说说几个注意事项吧:

在使用Python操作Access数据库的时候要注意位的匹配,x86的Python要和x86的Access文件相对应,x64的要和x64的Access想对应,如果对应不起来,那就会出错,并且百度好久都百度不到,我是经过无数次的尝试才发现的。解决方法就是将Python卸载重装。

用win32com来操作数据库的时候无法连接带有密码的Access数据库的,因此在操作带有密码的Access数据库的时候要使用别的库,我这里使用的是pypyodbc库。

使用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基本上就是这样,操作起来还是比较简单的,但是也不知道为什么,在学习的时候总是会遇到一些坑,上面的代码没有经过精密的处理,只是趁着还有些印象赶紧写了这篇文章记录下来,大神勿喷,我是菜鸟。。。

目前有:1条访客评论

  1. kTWO
    2017-05-31 18:25

    上面的win32com打开带有密码的mdb是否可以还请大神留言。

留下脚印,证明你来过。

*

*

流汗坏笑撇嘴大兵流泪发呆抠鼻吓到偷笑得意呲牙亲亲疑问调皮可爱白眼难过愤怒惊讶鼓掌