Python工具箱系列(二十八)
Access数据库操作
Access也是微软Office套餐中的经典产品。虽然在许多人眼里,Access已经是上古时代的产品,但实际上它一直深受好评,并且稳定发展。之所以在许多IT人士眼里,Access不值一提的主要原因恰恰也是它深受非专业人士喜欢的原因:专供非IT人士自用的数据库。
Access生命力强的原因如下:
◆Access聚焦于“自用软件开发”,既然是“自用”,那当然是省却不必要的功能,尽量满足快速开发的那部分框架最好。所以Access对软件的开发性能要求并不高,导致升级动力不强,功能非常稳定。也就是说Access的使用者是自己开发软件给自己用的,个人色彩浓厚,自己种地自己吃,使用越简便越好,技术路线越固定越好。Access功能太强太复杂(比如升级成共享版)反而会造成开发的不方便,违背了软件的初衷。而其它数据库管理系统是对标企业级应用,开发和使用这些软件的用户群体又非常的专业,因此竞争之外需要不断升级改造追求更多的特性,而Access不必如此。
◆Access的使用群体很大很固定也很低调。据估算企业用户就超过14万家,但是曝光率不高,原因是这部分使用群体主要是非IT专业的高级办公软件使用者,是完成业务为目标,并没有上网讨论技术的动力与需求。
◆Access使用的门槛非常低,尤其是可以vba编程和用窗体报表快速做出图形界面是非常关键的两点。在工作实践中,人们发现Access对于非专业编程人员最友好的,是当你需要在代码中写sql语句的时候,可以用它的查询设计先设计好并校验正确,再转到sql视图就可以拷贝出合格的sql语句,这一点确实非常棒。
数据库排行榜的2022年最新排名中,Access仍然在前十之列如下图所示:
Access具体使用,本文不再赘述,主要谈谈如何使用python来操作Access。由于Access对平台有一定的依赖性,所以相关的库较少。一般通过两个库来操作Access:
◆pyodbc。通过上古的ODBC技术来操作Access数据库
◆win32com。这个库的操作方法模拟VBA的风格,与传统的数据库操作差距有些大,不推荐
使用pyodbc访问Access还是需要一些配置工作量的。首先安装相关库。
pip install pyodbc
检测当前ODBC环境是否完备。
>>> import pyodbc
>>> [x for x in pyodbc.drivers() if x.startswith('Microsoft')]
[]
返回为空,就说明没有安装相关的驱动程序。需要下载相关驱动并且自行安装。随后创建一个空白的Access文件,假设其文件名为:d:/demo.accdb,相关的示例代码如下:
import random
from faker import Faker
import pyodbc
# 数据库文件
accessfile = r'D:\demo.accdb'
# 最高薪资(单位为K)
maxsalary = 30
def fakedata(maxtimes):
# 模拟数据。人名+薪资
fake = Faker('zh_CN')
data_total = [[fake.name(), random.randint(0, maxsalary)]
for x in range(maxtimes)]
return data_total
def operator(filename):
fakesalary = fakedata(100)
connection = pyodbc.connect(
r'Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ='+filename+';')
connection.autocommit = True
# 创建工资表
create_table_sql = '''create table salary_table ( id autoincrement primary key, name varchar(255) , salary int ) '''
# 插入语句
insert_table_sql = '''insert into salary_table(name, salary) values (?, ?) '''
# 查询语句
select_public_servant_sql = '''select * from salary_table where salary > 10 '''
with connection.cursor() as cursor:
# DDL
cursor.execute(create_table_sql)
# 插入数据
for info in fakesalary:
name = info[0]
pay = info[1]
cursor.execute(insert_table_sql, (name, pay))
# 查询之
cursor.execute(select_public_servant_sql)
results = cursor.fetchall()
for row in results:
print(row)
operator(accessfile)
述代码将创建表格salary_table,并且将模拟的数据保存到表中。同时,在控制台返回查询的结果。后继的操作与操作其它数据库类似。
本站大部分文章、数据、图片均来自互联网,一切版权均归源网站或源作者所有。
如果侵犯了您的权益请来信告知我们删除。邮箱:1451803763@qq.com