Python使用pyodbc连接Access数据库操作Access2016

Python使用pyodbc连接Access数据库操作Access2016

# -*-coding:utf-8-*-
'''Access数据库连接网上大致有两种方法,一种是使用pyodbc,另一种是使用win32com.clientI(此处方法一安装,win32com下次有空再试试)
方法一:
一、安装第三方库 pyodbc
Pip install pyodbc

二、检验是否可以正常连接数据库
检查是否有一个Microsoft Access ODBC驱动程序可用于你的Python环境(在Windows上)的方法:
# >>> import pyodbc
# >>> [x for x in pyodbc.drivers() if x.startswith('Microsoft Access Driver')]
如果你看到一个空列表,那么您正在运行64位Python,并且需要安装64位版本的“ACE”驱动程序。
如果您只看到['Microsoft Access Driver (*.mdb)']并且需要使用.accdb文件,那么您需要安装32位版本的“ACE”驱动程序

三、安装64位的ODBC 驱动器:
1.Microsoft Access 2016 数据库引擎可再发行程序包
1.Microsoft Access Database Engine 2016 Redistributable

https://www.microsoft.com/en-us/download/details.aspx?id=54920

2.Microsoft Access 2010 数据库引擎可再发行程序包
2.Microsoft Access Database Engine 2010 Redistributable
https://www.microsoft.com/en-us/download/details.aspx?id=13255
右击文件accessdatabaseengine_X64.exe(约79.5Mb大小)选择以管理员模式运行即可安装【此处使用版本为2016】
    [
    报错:Microsoft office Click-to-Run Service (Process ld: 4240)
    解决:打开任务管理器,可以看到在后台有一个Microsoft Office Click-to-run(SXS)的进程。
    ]

注意:

1. 如何查看Access是32位还是64位
--->>> 文件 >  账户  > 关于Access'''

import pyodbc

# python_Access.accdb
DBfile = r"./python_Access.accdb"  # 数据库文件需要带路径
print(DBfile)
d = [x for x in pyodbc.drivers() if x.startswith('Microsoft Access Driver')]
print(d)
# 连接数据库(不需要配置数据源),connect()函数创建并返回一个 Connection 对象
# 1.创建链接
conn = pyodbc.connect(r"DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=" + DBfile + ";Uid=;Pwd=;")
# cursor()使用该连接创建(并返回)一个游标或类游标的对象
# 2.创建游标
cursor = conn.cursor()

# cnxn = pyodbc.connect('DSN=pyAcc.mdb;PWD=password')
# cursor = cnxn.cursor()

print('`````````````` 查询所有表名 ``````````````')
for table_info in cursor.tables(tableType='TABLE'):
    print(table_info.table_name)
# 3.创建SQL查询语句
# SQL = "SELECT * from datatable;"
SQL = "SELECT * from 销售出库详情 where id<10;"
# 4.执行查询
datas = cursor.execute("SELECT * from 销售出库详情")  # <pyodbc.Cursor object at 0x000001B851E04BB0>
print(type(datas))
for row in cursor.execute(SQL):
    print(row)  # <class 'pyodbc.Row'>
print(type(row))
cursor.close()
conn.close()
posted @ 2022-03-02 12:35  zechariah1  阅读(1056)  评论(0编辑  收藏  举报