分享

使用Python对Access读写操作

 rcylbx 2019-09-13

学习Python的过程中,我们会遇到Access的读写问题

一、可以利用win32.client模块的COM组件访问功能,通过ADODB操作Access的文件。

1、导入模块

复制代码
import win32com.client
复制代码

2、建立数据库连接

复制代码
conn = win32com.client.Dispatch(r'ADODB.Connection')DSN = 'PROVIDER = Microsoft.Jet.OLEDB.4.0;DATA SOURCE = test.mdb'conn.Open(DSN)
复制代码

3、打开一个记录集

复制代码
rs = win32com.client.Dispatch(r'ADODB.Recordset')rs_name = 'MEETING_PAPER_INFO'rs.Open('[' + rs_name + ']', conn, 1, 3)
复制代码

4、对记录集操作

复制代码
rs.AddNew() #添加一条新记录rs.Fields.Item(0).Value = 'data' #新记录的第一个字段设为'data'rs.Update() #更新
复制代码

5、用SQL语句来增、删、改数据

复制代码
#sql = 'Insert Into ' rs_name + ' (id, innerserial, mid) Values ('002133800088980002', 2, '21338')' #sql语句conn.Execute(sql) #执行sql语句#sql = 'Delete * FROM ' + rs_name + ' where innerserial = 2'conn.Execute(sql)#sql = 'Update ' + rs_name + ' Set mid = 2016 where innerserial = 3'conn.Execute(sql)
复制代码

6、查:遍历记录

复制代码
rs.MoveFirst() #光标移到首条记录count = 0while True: if rs.EOF: break else: for i in range(rs.Fields.Count): #字段名:字段内容 print(rs.Fields[i].Name, '', rs.Fields[i].Value) count += 1 rs.MoveNext()
复制代码

7、关闭数据库

复制代码
conn.Close()
复制代码

二、利用pypyodbc模块

1.导入模块

复制代码
import pypyodbc
复制代码

2.建立数据库连接

复制代码
#建立数据库连接def mdb_conn(db_name, password = ''): ''' 功能:创建数据库连接 :param db_name: 数据库名称 :param db_name: 数据库密码,默认为空 :return: 返回数据库连接 ''' str = 'Driver={Microsoft Access Driver (*.mdb)};PWD' + password + ';DBQ=' + db_name conn = pypyodbc.win_connect_mdb(str) return conn
复制代码

3.创建游标

复制代码
cur = conn.cursor()
复制代码

4.用sql语句来增、删、改、查数据

复制代码
#def mdb_add(conn, cur, sql): ''' 功能:向数据库插入数据 :param conn: 数据库连接 :param cur: 游标 :param sql: sql语句 :return: sql语句是否执行成功 ''' try: cur.execute(sql) conn.commit() return True except: return False#def mdb_del(conn, cur, sql): ''' 功能:向数据库删除数据 :param conn: 数据库连接 :param cur: 游标 :param sql: sql语句 :return: sql语句是否执行成功 ''' try: cur.execute(sql) conn.commit() return True except: return False#def mdb_modi(conn, cur, sql): ''' 功能:向数据库修改数据 :param conn: 数据库连接 :param cur: 游标 :param sql: sql语句 :return: sql语句是否执行成功 ''' try: cur.execute(sql) conn.commit() return True except: return False#def mdb_sel(cur, sql): ''' 功能:向数据库查询数据 :param cur: 游标 :param sql: sql语句 :return: 查询结果集 ''' try: cur.execute(sql) return cur.fetchall() except: return []
复制代码

5.关闭游标

复制代码
cur.close()
复制代码

6.关闭数据库连接

复制代码
conn.close()
复制代码

附:pypyodbc模块的完整测试代码

复制代码
# -*- coding:utf-8 -*-__author__ = 'mayi'#导入模块import pypyodbc#定义conndef mdb_conn(db_name, password = ''): ''' 功能:创建数据库连接 :param db_name: 数据库名称 :param db_name: 数据库密码,默认为空 :return: 返回数据库连接 ''' str = 'Driver={Microsoft Access Driver (*.mdb)};PWD' + password + ';DBQ=' + db_name conn = pypyodbc.win_connect_mdb(str) return conn#增加记录def mdb_add(conn, cur, sql): ''' 功能:向数据库插入数据 :param conn: 数据库连接 :param cur: 游标 :param sql: sql语句 :return: sql语句是否执行成功 ''' try: cur.execute(sql) conn.commit() return True except: return False#删除记录def mdb_del(conn, cur, sql): ''' 功能:向数据库删除数据 :param conn: 数据库连接 :param cur: 游标 :param sql: sql语句 :return: sql语句是否执行成功 ''' try: cur.execute(sql) conn.commit() return True except: return False#修改记录def mdb_modi(conn, cur, sql): ''' 功能:向数据库修改数据 :param conn: 数据库连接 :param cur: 游标 :param sql: sql语句 :return: sql语句是否执行成功 ''' try: cur.execute(sql) conn.commit() return True except: return False#查询记录def mdb_sel(cur, sql): ''' 功能:向数据库查询数据 :param cur: 游标 :param sql: sql语句 :return: 查询结果集 ''' try: cur.execute(sql) return cur.fetchall() except: return []if __name__ == '__main__': pathfile = 'test.mdb' tablename = 'prov' conn = mdb_conn(pathfile) cur = conn.cursor() # sql = 'Insert Into ' + tablename + ' Values (33, 12, '天津', 0)' if mdb_add(conn, cur, sql): print('插入成功!') else: print('插入失败!') # sql = 'Delete * FROM ' + tablename + ' where id = 32' if mdb_del(conn, cur, sql): print('删除成功!') else: print('删除失败!') # sql = 'Update ' + tablename + ' Set IsFullName = 1 where ID = 33' if mdb_modi(conn, cur, sql): print('修改成功!') else: print('修改失败!') # sql = 'SELECT * FROM ' + tablename + ' where id > 10' sel_data = mdb_sel(cur, sql) print(sel_data) cur.close() #关闭游标 conn.close() #关闭数据库连接
复制代码

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多