Python工具箱系列(二十八),虽然在许多人眼里,A


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,并且将模拟的数据保存到表中。同时,在控制台返回查询的结果。后继的操作与操作其它数据库类似。

评论关闭