pyodbc操作Access数据库
现在各种各样的数据库层出不穷,什么MySQL、PostgreSQL、MongoDB这些都是比较火的,还有一些稍微小众一点的数据库就更多了。相比之下,微软Office套件里面附带的Access数据库究落寞了很多。不过好歹Access数据库还是有些用处的,作为一个既是数据库又是前端界面的软件,对一些非科班又有数据库需求的人来说还是比较好用的。本文利用pyodbc来简单介绍一下如何操作Access数据库。
安装pyodbc
最简单的方式自然是pip安装了:
pip install pyodbc
如果会使用pipenv的话就更好了,一整套Python虚拟环境管理方案,强烈推荐:
pipenv install pyodbc
最近又了解了一下faker类库,所以顺便用faker添加了一些模拟数据。所以顺便还要安装faker:
pip install faker
安装Access数据库引擎
Access数据库稍微有点特殊,还需要安装一个额外的数据库引擎。注意版本要和安装的Office版本一样,如果安装的Office是32位而安装了64位的引擎,也没办法使用。如果安装的是Office 2019的话,用2016引擎就好了。其他版本的没试过。
- Office 2016引擎
- Office 2010引擎
安装完毕后打开ODBC数据源,查看一下平台,如果显示出了具体位数,说明安装成功。当然没安装以前也可以先查看一下,应该是N/A,表示尚未安装。
这样一来准备工作就结束了。
创建Access数据库
首先打开Access软件,创建一个数据库。创建完毕后记得关闭数据库,否则接下来代码会报错。
增删查改
pyodbc库的用法和一般的Python SQL驱动类似,我就不做过多介绍了,很简单的示例代码,做了一些简单注释。首先创建了3000条用户数据,然后简单查询了一下所有公务员。数据库字段完全按照faker提供的模拟数据来设计的。代码只用了简单的SQL添加和查询功能,不过更新和删除也很简单,就不写了。
import pyodbc
import fakercreate_table_sql = '''\
create table user
(id autoincrement primary key,username varchar(255) unique,nickname varchar(255) not null,password varchar(20) not null,address varchar(255),birthday date,company varchar(30),job varchar(20),telephone varchar(14)
)
'''insert_table_sql = '''\
insert into user(username, nickname, password, address, birthday, company, job, telephone)
values (?, ?, ?, ?, ?, ?, ?, ?)
'''select_public_servant_sql = '''\
select *
from user
where job = '公务员'
'''# 准备模拟数据
fake = faker.Faker('zh_CN')
# 设置种子值,不设的话每次随机的都不一样
fake.seed(47)db_file_location = r'D:\desktop\db.accdb'
# 这里用的是Python3.5的语法,如果是低版本Python的话需要改成普通方式
connection = pyodbc.connect(rf'Driver={{Microsoft Access Driver (*.mdb, *.accdb)}};DBQ={db_file_location};')connection.autocommit = True# 第一次创建表,将其设置为False
table_exists = False
if not table_exists:with connection.cursor() as cursor:cursor.execute(create_table_sql)# 添加数据
with connection.cursor() as cursor:for _ in range(3000):cursor.execute(insert_table_sql, (fake.pystr(min_chars=6, max_chars=10),fake.name(),fake.password(length=10),fake.address(),fake.date_of_birth(minimum_age=0, maximum_age=120),fake.company(),fake.job(),fake.phone_number()))# 查询一下所有公务员cursor.execute(select_public_servant_sql)results = cursor.fetchall()for row in results:print(row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], sep='\t')
代码完成之后,打开Access数据库看一下,效果很完美,几乎和真的一样(滑稽)。当然这只是简单的演示了一下,感觉对于一些简单的项目,又希望能直接查看数据库内容,可以考虑一下Access数据库。
一开始我在研究的时候,还出现了Database you are trying to open requires a newer version of Microsoft Access
这么一个错误,我还有点纳闷,我明明用的已经是Access 2019了,为啥还提示我需要更新版本的Access。最后发现可能是我一开始代码写的有问题,或者是忘了关闭数据库,导致的数据库文件损坏了。删掉了原来的accdb文件重新创建了一个,就能完美运行了。
pyodbc操作Access数据库相关推荐
- Python如何操作Access数据库及如何操作accdb文件
目前来说,Access数据库的使用度相对较少,所以在使用Python操作Access数据库文件时,相应的文章和教程也较少.为了解决各位在类似场景下的难题,特意写文章如下: 1.安装模块pyodbc p ...
- C# 操作ACCESS数据库
看到CSDN上不断兄弟姐妹提问关于c#操作Access的问题,于是本人利用闲暇将c#操作Access的方法加以总结,主要解决的问题有: 创建mdb 创建table 读取table内容 查询table中 ...
- python不可以操作access数据库_Python操作Access数据库基本操作步骤分析
Python编程语言的出现,带给开发人员非常大的好处.我们可以利用这样一款功能强大的面向对象开源语言来轻松的实现许多特定功能需求.比如Python操作Access数据库的功能实现等等.在Python操 ...
- C#操作Access数据库
本教程介绍了如何通过ADO.NET的OleDb相关类来操作Access数据库的相关步骤. 1 软件环境 开发平台:Microsoft Visual Studio 2010 数据库:Micros ...
- 一个封装了的ADO类,功能非常强大,并做了一个DEMO演示如何操作ACCESS数据库
呵呵,说实在的,这个类俺是从外国论坛上下载的,自己研究了下如何使用并做了一个DEMO,演示如何操作ACCESS数据库.希望给那些没有接触数据库编程的初学者一点启发吧.有任何问题请及时与我联系^_^.程 ...
- MFC+ODBC操作Access数据库pdf版
<MFC+ODBC操作Access数据库pdf版> 下载地址: 网盘下载 转载于:https://www.cnblogs.com/long12365/p/9731370.html
- golang odbc mysql_go语言通过odbc操作Access数据库的方法
本文实例讲述了go语言通过odbc操作Access数据库的方法.分享给大家供大家参考.具体如下: 这里需要用到go-odbc库,下载地址为:https://github.com/weigj/go-od ...
- 直接通过ADO操作Access数据库(修改版)
自身的OLE DB Privider,而且还可以应用所有的ODBC驱动程序.关于OLE DB和ADO的其它详细情况,读者可以自行查阅相关书籍或MSDN,这里就不一一说明了.让我们直接步入主题:如何掌握 ...
- DELPHI中操作ACCESS数据库
DELPHI中操作ACCESS数据库(建立.mdb文件,压缩数据库) 以下代码在WIN2K,D6,MDAC2.6下测试通过, 编译好的程序在WIN98第二版无ACCESS环境下运行成功. //在之前u ...
最新文章
- 四连通,和八连通的详解(MATLAB)
- linux增加分区swap,linux中Centos7增加swap分区详解
- (七)立体标定与立体校正 【计算机视觉学习笔记--双目视觉几何框架系列】
- 将std::string字符串格式的数字转换为int类型的数字
- Redis之GeoHash
- PowerDesigner逆向工程导入MYSQL数据库总结
- PAT_1056_组合数的和(15)
- 如何查找识别苹果无线鼠标/无线键盘/触控板的设备序列号
- CCD与CMOS的区别
- mysql让数据-1_mysql数据库基本操作1
- workbench如何截图_戴尔键盘电脑如何快捷键截屏
- Unity中控制物体运动
- bugku-逆向-5、Timer
- 红孩儿编辑器的详细设计
- matlab输出pdf图片超出边框,matlab - 将Matlab Simulink模型保存为PDF,带有紧密的边界框 - 堆栈内存溢出...
- Java中的值传递和地址值传递
- C语言——运算符优先级
- Python界面编程第八课:Pyside2 (Qt For Python)打开关于窗口
- 多网卡情况,使用静态路由,为访问目标网络指定路径
- /id_xndu5otm2mdq0.html,index.html