1. 小项目功能介绍

本文通过一个小项目介绍Python3读写Access数据库(.mdb)的方法,该项目功能较简单,将mdb中的旧编码替换为新编码,新旧编码对照表放在1个excel(本文命名为新旧编码对照表.xlsx)中,功能实现主要分为三步:

1)读取mdb所有的表,获取每个表的PartNumber列(旧编码所在的列)的每个编码。

2)读取新旧编码对照表.xlsx,找到“旧编码”和“新编码”所在的单元格,并判断步骤1中的编码是否为旧编码。若是旧编码,则找到对应的新编码;若是新编码,则给出错误提示;若未找到,则给出警告。

3)用获取到的新编码替换原来的旧编码。

新旧编码对照表.xlsx的内容如下:

图1 新旧编码对照表.xlsx的内容

mdb文件的内容如下。

图2 mdb文件表Table_Capacitor的内容

图2 mdb文件表Table_BJT的内容

2. 代码实现

代码实现如下:

#!/usr/bin/env python
# -*- conding: utf-8 -*-
import pypyodbc
import xlrddef find_in_excel(path,word):data = xlrd.open_workbook(path)table = data.sheets()[0]nrows = table.nrows#excel总行数ncols = table.ncols#excel总列数#print(nrows,ncols)for r in range(nrows):for c in range(ncols):cell = table.cell(r,c).valueif(isinstance(cell,float) or isinstance(cell,int)):cell = str(int(cell))if(cell == u"旧编码"):old_code_col = celif(cell == u"新编码"):new_code_col = celif(cell == word):print("cell = %s" %cell)if(old_code_col == c):new_code = table.cell(r,c+1).valueif(isinstance(new_code,float) or isinstance(new_code,int)):new_code = str(int(new_code))return (0,new_code)#若是旧编码,则直接返回新编码elif(new_code_col == c):#print("new_code_col = %d" %new_code_col)return (1,cell)#若是新编码,则返回新编码           return (-1,-1)if __name__=="__main__":tables = ['BJT','Capacity','Connector','Diode','ForBOM','IC','Inductor','Mechanical','MOSFET','NoPartNumber','Other','Resistor']tables = ['Table_BJT','Table_Capacitor']print(len(tables))for table in tables:mdb = 'Driver={Microsoft Access Driver (*.mdb,*.accdb)};DBQ=C:\\Users\\liyua\\Desktop\\1.mdb'conn = pypyodbc.win_connect_mdb(mdb)cur = conn.cursor()sql = "SELECT * FROM " + tableprint(sql)cur.execute(sql)alldata = cur.fetchall()total_rows = len(alldata)total_cols = len(alldata[0])print("****************Begin to process\"表:%s\"****************" %table)print("\"表:%s\"总行数 = %d" %(table,total_rows))print("\"表:%s\"总列数 = %d" %(table,total_cols))for row in range(0,total_rows):sql = "SELECT [Part Number] FROM " + table #带空格时必须用[]包括cur = conn.cursor()cur.execute(sql)Part_Numbers = cur.fetchall()PartNumber = Part_Numbers[row][0]if(isinstance(PartNumber,float) or isinstance(PartNumber,int)):PartNumber = str(int(PartNumber))result = find_in_excel(r"C:\Users\liyua\Desktop\1.xlsx",PartNumber)if(result[0]==0):print("\"表:%s\"中%s为旧编码,对应的新编码为:%s" %(table,PartNumber,result[1]))sql = "Update [" + table + "] Set [Part Number] = '" + result[1] + "' where " + "[Part Number]" + " = " + "'" + PartNumber + "'"print(sql)cur.execute(sql)conn.commit()cur.close()elif(result[0]==1):print("error!%s已经为新编码" %result[1])continueelif(result[0]== (-1)):print("warning!未在excel中找到\"表:%s\"中的编码:%s" %(table,PartNumber))continueprint("****************End processing\"表:%s\"****************" %table)conn.close()print("****************所有表处理完毕****************")

3. 执行结果

图3 代码执行结果

处理过后的mdb的内容如下:

图4 处理后的mdb文件表Table_Capacitor的内容

注意上图中对应ID=4的Part Number(11030231)在excel中未找到,所以上图中并未更新为新编码。

图5 处理后的mdb文件表Table_BJT的内容

通过一个小项目介绍Python3读写Access数据库(.mdb)的方法相关推荐

  1. 3年前的一个小项目经验,分享给菜鸟兄弟们(公文收发小软件:前期需求调查部分)...

    两年前还在宁波时,我做过宁波教育局的一个小项目,一个部门内部使用的公文收发记录软件,这个项目当时是跟 他们的网络中心的老师洽谈的,网络中心负责此项目的老师,跟我们年龄差不多,30不到,可能要比我小上2 ...

  2. java学习笔记(二十八)——开发一个小项目(VMeeting3.0)

    上篇文章按照较规范的产品需求文档梳理了项目的逻辑,感觉开发起来明晰了很多:挂上一篇文章java学习笔记(二十七)--开发一个小项目(VMeeting2.0)_Biangbangbing的博客-CSDN ...

  3. v54.04 鸿蒙内核源码分析(静态链接) | 一个小项目看中间过程 | 百篇博客分析HarmonyOS源码

    子曰:"回也其庶乎,屡空.赐不受命,而货殖焉,亿则屡中." <论语>:先进篇 百篇博客系列篇.本篇为: v54.xx 鸿蒙内核源码分析(静态链接篇) | 一个小项目看中 ...

  4. 三年前的一个小项目经验,分享给菜鸟兄弟们

    原文地址 (公文收发小软件:前期需求调查部分) 日期:2009年1月1日  晚上 分类:项目开发经验 两年前还在宁波时,我做过宁波教育局的一个小项目,一个部门内部使用的公文收发记录软件.这个项目当时是 ...

  5. 做了一个小项目-PHP实现人生只有900个月

    做了一个小项目-PHP实现人生只有900个月 ​ 起因当然是阮一峰老师那篇振聋发聩的博文<人生只有900个月>,几年前看到以后羞愧到无法自拔,想到自己曾经浪费多少时间,在一些无意义的事情上 ...

  6. c语言计算学生成绩的合格率,分享一个几年前刚学c的一个小项目。成绩的输入,查询,排序,插...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 分享一个几年前刚学c的一个小项目.成绩的输入,查询,排序,插入,删除,修改,求平均分总分.合格率的,对于初学者可以看看这种. #include void ...

  7. datagridview控件读写mysql数据库表格的方法_C#读写Access数据库、表格datagridview窗体显示代码实例...

    C#读写Access数据库.表格datagridview窗体显示代码实例 最近项目中用到C#对于Access数据库表读写.mdb操作,学习了下相关的东西,这里先整理C#对于Access数据库的操作,对 ...

  8. java web access_Java Web项目中连接Access数据库的配置方法

    本文是对前几天的"JDBC连接Access数据库的几种方式"这篇的升级.因为在做一些小项目的时候遇到的问题,因此才决定写这篇博客的.昨天已经将博客公布了.可是后来经过一些验证有点问 ...

  9. jdk1.8版本下访问本地数据库文件(access数据库.mdb)与(火鸟数据库.fdb)踩坑记录

    项目场景: 具体场景是需要访问另一C/S架构软件生成的本地数据库,有两种,第一种是access数据库.mdb,第二种是闻所未闻的火鸟数据库.fdb文件,将二者中的数据提取出来入mysql.(期间走了很 ...

最新文章

  1. 走近虚拟机——McAfee研究员孙冰谈虚拟机技术和虚拟机安全
  2. java 实现 pbkdf2_sha256加密验证算法
  3. 条形图坐标轴_解密咨询报告中常见的双层条形图的制作方法
  4. 宇宙的最原始状态是个什么样子
  5. 长得类似铁甲小宝的机器人_铁甲小宝中十大机器人战斗力排行榜,第一谁都猜到了...
  6. ppp协议 服务器,详解PPP及PPPoE协议
  7. vue导出excel表格(详细教程)
  8. 【STM32】时钟相关函数和类型
  9. java 咖啡 典故,解读六大咖啡种类 常见咖啡种类及特点、背后典故、历史和定义...
  10. 96PIN直插DIP千兆四口网络变压器 千兆交换机路由器网络滤波器
  11. [1] DevOps 自动化运维工具Chef----入门
  12. 什么是PR、什么是BD?
  13. Vulnhub-Earth
  14. DFS(深度优先遍历)
  15. jeecg-boot自动生成代码_PSIM 仿真:如何使用 PSIM12 自动生成代码
  16. Spring----Spring入门
  17. Django博客开发(十三)—一个简单的站内搜索
  18. 如何批量修改文件名字的一部分?
  19. 转行软件测试,简简单单3个月出来就是高薪工作,靠谱吗?我的第一桶金...
  20. 【线性代数】结合 Ax=b 的通解结构,直观理解秩、线性变换、相关无关、基础解系

热门文章

  1. 全球与中国AirPods保护套市场深度研究分析报告
  2. 中国高空作业平台产业的“危”与“机”
  3. 活动结束啦,那么复盘该从哪些方面展开?
  4. 跨部门沟通的冷板凳,你坐过吗?
  5. android平板专用系统,Chrome OS将取代Android成为平板专用系统
  6. 均衡之刃这款球拍是谁创作的
  7. 路径规划算法:基于飞蛾扑火算法的路径规划算法- 附代码
  8. 这款iPad金箔笔刷,绝美,blingbling
  9. html5制作大小写转换,Convert Case - 英文大小写转换工具
  10. 大连报关学校计算机专业,大连报关学校