pyodbc操作Access数据库

2023-11-18

现在各种各样的数据库层出不穷,什么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引擎就好了。其他版本的没试过。

安装完毕后打开ODBC数据源,查看一下平台,如果显示出了具体位数,说明安装成功。当然没安装以前也可以先查看一下,应该是N/A,表示尚未安装。

ODBC数据源

这样一来准备工作就结束了。

创建Access数据库

首先打开Access软件,创建一个数据库。创建完毕后记得关闭数据库,否则接下来代码会报错。

增删查改

pyodbc库的用法和一般的Python SQL驱动类似,我就不做过多介绍了,很简单的示例代码,做了一些简单注释。首先创建了3000条用户数据,然后简单查询了一下所有公务员。数据库字段完全按照faker提供的模拟数据来设计的。代码只用了简单的SQL添加和查询功能,不过更新和删除也很简单,就不写了。

import pyodbc
import faker

create_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文件重新创建了一个,就能完美运行了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pyodbc操作Access数据库 的相关文章

  • 了解 Beautiful Soup 中的 Find() 函数

    我知道我想做的事情很简单 但这让我感到悲伤 我想使用 BeautifulSoup 从 HTML 中提取数据 为此 我需要正确使用 find 功能 这是我正在使用的 HTML div class audit div class profile
  • 如何使用Python将RGB565字节数组转换为RGB888字节数组?

    根据我的问题RGB888 转 RGB565 https stackoverflow com questions 61519934 how can i use opencv python to convert rgb888 to rgb565
  • 如何在Python中每次运行脚本时增加变量?

    我有一个 Python 脚本 我想在每次运行时增加一个全局变量 这可能吗 使用外部文件很容易做到这一点 您可以创建一个函数来为您执行此操作 这样您就可以根据需要将多个文件用于多个变量 尽管在这种情况下您可能想要研究某种序列化并将所有内容存储
  • winpdb 不适用于 python 3.3

    我无法让 rpdb2 与 python 3 3 一起运行 但根据多个来源 这应该是可能的 rpdb2 d myscript py A password should be set to secure debugger client serv
  • pandas 使用查询功能检查列是否为空

    我有 pandas 数据框 我想在它的查询函数上执行 isnull 或 not isnull 条件 如下所示 In 67 df data pd DataFrame a 1 20 None 40 50 In 68 df data Out 68
  • pandas 用 nan 值切割了一系列

    我想将 pandas cut 函数应用于包含 NaN 的序列 期望的行为是它对非 NaN 元素进行存储并为 NaN 元素返回 NaN import pandas as pd numbers with nan pd Series 3 1 2
  • Python:合并嵌套列表

    初学者在这里 我有 2 个要合并的嵌套列表 list1 a b c d e f g h list2 p q r s t u v w 我正在寻找的输出是 list3 a p q b c r s d e t f g h u v w 这可以在没有
  • Django:如何从管理界面调用管理自定义命令执行?

    参考 从代码执行管理命令 https stackoverflow com questions 907506 how can i call a custom django manage py command directly from a t
  • 在 Kivy 应用程序中获取文本输入值

    Python Kivy 新手尝试构建一个测试应用程序 其中包含输入框 确定按钮和单击确定按钮时应更改文本的标签 但我得到了 NameError 全局名称 txt1 未定义 我究竟做错了什么 import Kivy import kivy i
  • Python - 重写 print()

    我正在使用 mod wsgi 想知道是否可以覆盖 print 命令 因为它没用 这样做是行不通的 print myPrintFunction 因为这是一个语法错误 Print 不是 Python 2 x 中的函数 因此这不能直接实现 但是
  • 如何读取 10 位原始图像?其中包含 RGB-IR 数据

    我想知道如何从我的 10 位原始 它有 rgb ir 图像数据 数据中提取 RGB 图像 如何使用 Python 或 MATLAB 进行阅读 拍摄时的相机分辨率为 1280x720 室内照片图片下载 https drive google c
  • 如何在Python中打印出字母表中的第n个字母?

    ASCII 数学似乎在 Python 中不起作用 一 5 不起作用 如果没有字母数组 如何快速打印出字母表中的第 n 个字母 我天真的解决方案是这样的 letters A B C D E F G H I J K L M N O P Q R
  • 登录 python + mod_wsgi 应用程序

    我在 apache 服务器上部署了一个 python Flask 应用程序 这是我的abc conf file WSGIDaemonProcess voting app threads 5 WSGIScriptAlias election
  • 读取 JSON 文件并将其漂亮打印到另一个文件

    我有一个复杂 嵌套 的 json 文本文件 它是文本文件中的一长行 有什么方法可以读取文件 在 python 中 并将 json 缩进 漂亮地打印到新的文本文件中吗 使用读取文件json load 并使用json dump 在指定缩进值时将
  • 向 list.extend() 传递不可迭代对象

    我正在创建一个公共方法来允许调用者将值写入设备 例如将其称为 write vals 由于这些值将实时输入 因此我希望通过允许用户输入列表或单个值来简化用户的生活 具体取决于他们需要写入的值的数量 例如 write to device 1 2
  • 如何开始使用“scipy”

    我之前安装过 Python 3 4 2 和 3 5 2 在这两种情况下 我都可以在 Idle 中涉足编写和测试代码 这给了我两个窗口 一个用于代码的 运行 窗口 一个用于交互和测试的 Shell 窗口 输出 抱歉 不确定术语是否正确 现在我
  • 当有效的 django 表单保存在数据库中时如何触发自定义 python 代码

    Django 新手 我创建了一个简单的表单如下this https www youtube com watch v 3XOS UpJirU教程 我的表单正确地将数据保存在我的 Postgres 连接的本地数据库中 我想知道 每当将有效表单保
  • 随机数生成器每次仅返回一个数字

    Python 是否有一个随机数生成器 每次只返回一个随机整数next 函数被调用 数字不应该重复并且生成器应返回区间内的随机整数 1 1 000 000 这是独一无二的 我需要生成超过一百万个不同的数字 这听起来好像非常消耗内存 以防所有数
  • 在 python 中将数组作为参数传递

    我是Python新手 现在我需要声明大小为 20 的数组并将该数组传递给函数 需要数组的函数如下 function args The args是一个输入function 谁能帮我 如何在 python 中传递数组 当你说 数组 时 我假设你
  • mpld3图,注释问题

    我正在使用 mpld3 在 Intranet 网站上显示图形 我正在使用将图形保存到字典并使用 mpld3 js 在客户端渲染它的选项 除非我想使用注释 否则该图呈现良好 这些显然是抵消的 我不明白为什么 因为即使我将偏移量设置为 0 0

随机推荐

  • 刷脸开门上班取外卖等都会无处不在

    刷脸支付的诞生掀起了支付宝微信的竞争关系 但其实在二维码支付开始流行时 支付宝和微信的竞争关系便已埋下种子 当时抢着做扫码支付的创业者更是一批接着一批 丝毫不亚于如今刷脸支付服务商的趋势 而早些入局扫码支付的创业者们 凭借扫码支付打了漂亮的
  • 批量生成文件夹内文件的目录

    在记事本内输入 dir b gt 文件目录 txt 后保存记事本文件为bat格式后点击执行便可以生成 批处理文件 在DOS和Windows 任意 系统中 bat文件是可执行文件 由一系列命令构成 其中可以包含对其他程序的调用 这个文件的每一
  • Spdlog日志库的使用

    spdlog日志库 1 介绍 Spdlog是一个快速 异步 跨平台 易于使用的C 日志库 旨在提供高性能 易用性和灵活性 它支持多线程环境和异步记录 支持多种日志级别和多个后端 如控制台 文件 网络等 并提供灵活的日志格式化选项 以下是Sp
  • 《DELPHI赋》

    DELPHI者 经典开发工具 美奂美仑之开发环境也 盖论DELPHI其身世 实为神界之神物 后借宝蓝公司之手 于1990年代 现于江湖 DELPHI一出江湖 码农爱之 企业爱之 一时间 风雨雷动 群雄为之叹服 奸商为之苦脸 微软为之微软 后
  • 【网络安全】misc-1 利用python脚本解决盲水印

    踩坑总结 一 本机环境 win10 python3 脚本安装地址 从github上找了大佬的脚本 下载解压 GitHub chishaxie BlindWaterMark 盲水印 by python 安装脚本的依赖库 opencv pyth
  • idea使用命令提交代码到远程并使用gerrit走code review进行代码走查

    我们自己项目的使用idea提交代码走查code review的提交方法命令 git push
  • LabVIEW2020 利用LabSQL访问MySQL8.0.17.0数据库方法和注意点

    由于工作需要 需要通过Labview软件访问MySQL 在这之前百度了方法 按照方法一步一步实现 始终无法实现 最后通过各种百度各种方法试 终于成功了 现在将方法记录如下 一 需要软件 MySQL 数据库软件 我的是Mysql 8 0是64
  • 小爱音箱mini无法响应的解决方法

    1 按音箱的 暂停键 5秒 2 听到 已进入设置模式 后 橙色灯常亮时在手机上打开小爱音箱app 3 重新设置网络 选择路由器 路由器链接密码后 当语音提示已连接 说明设置完成
  • 硬盘位置不可用无法访问X:/指定不存在的设备?

    硬盘位置不可用无法访问X 指定不存在的设备 一 背景描述 家用电脑装了三块硬盘 一张SSD做系统 一张HDD做文件存储 另外一张4T硬盘做音视频照片存储 系统使用一段事件后重新安装过系统 后面有一天想着看看以前的照片 发现打不开了一直报错
  • 黑马程序员---从头开始,回忆JAVA基础之JAVA用十六进制表示浮点数的方法

    在二进制文件中 存储数据的格式为16进制 下面举例说明27 0f在二进制文件中怎么表示 float 共计32位 折合4字节 由最高到最低位分别是第31 30 29 0位 31位是符号位 1表示该数为负 0反之 30 23位 一共8位是指数位
  • 三菱plc编程实例3000_三菱PLC十字路口的红绿灯编程实例

    点击 上方关注 回复100领取电气控制100例 十字路口车辆穿梳 行人熙攘 车行车道 人行人道 有条不紊 那么靠什么来实现这井然秩序呢 靠的是交通信号灯的自动指挥系统 下面介绍三菱PLC编程实现的控制系统 交通灯的控制要求如下 一 控制要求
  • IT项目管理的实例与总结

    IT项目管理的实例与总结 Introduction Group Charter 人力资源规划 Project Scope Statement 项目进度计划与时间表 Cost Estimate 质量管理计划 风险管理计划 Microsoft
  • YOLO v7

    文章目录 YOLO v7 一 结构更新 VoVNet CSPVoVNet ELAN RepVGG auxiliary heads SimOTA 二 Loss更新 coarse to find auxiliary loss 三 Others
  • kafka常用命令

    启动zookeeper bin zookeeper server start sh config zookeeper properties 启动kafka bin kafka server start sh config server pr
  • QT时间日期定时器类(5.时间获取转换与排序)【QT基础入门 Demo篇】

    一 QT获取当前时间的方法 二 QString和QDateTime之间的相互转换 三 日期排序 获取时间最值 四 QT延时操作 一 QT获取当前时间的方法 1 使用QDateTime类
  • 解决vscode各种异常格式化编译器配置

    在vscode中创建vue文件时 若编辑代码时会出现间隔一段时间后自动的格式化内容 会很烦 经反复改查后无果 后来 对编辑器进行全面配置 首先原setting json文件中的代码是这样的 files autoSave afterDelay
  • 深度学习踩坑系列之十 创建&克隆&激活虚拟环境

    创建虚拟环境 conda create n your env name python 3 6 2 pip numpy matplotlib pandas sortedcontainers conda克隆虚拟环境 conda create n
  • 蓝桥杯 辗转相除法---求最大公约数

    1 例子 例如 求 319 377 319 377 0 余319 319 377 377 319 377 319 1 余58 377 319 319 58 319 58 5 余29 319 58 58 29 58 29 2 余0 58 29
  • Windows Server 2019 会话远程桌面-快速部署(RemoteApp)

    目录 一 实验要求 二 搭建远程桌面服务RDS 三 需要软件安装 1 安装Firefox 浏览器 2 安装一款视频播放器 3 安装WPS office 套件 四 发布应用 1 发布Firefox 浏览器 2 发布一款视频播放器 3 发布WP
  • pyodbc操作Access数据库

    现在各种各样的数据库层出不穷 什么MySQL PostgreSQL MongoDB这些都是比较火的 还有一些稍微小众一点的数据库就更多了 相比之下 微软Office套件里面附带的Access数据库究落寞了很多 不过好歹Access数据库还是