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()