python - 无法使用 ADOBDAPI 打开 MS ACESS 数据库
问题描述
当我尝试使用 Python ADODBAPI 库连接到 MS-Access 数据库时,我收到一条错误消息。
我曾尝试使用 Microsoft.ACE.OLEDB.12.0 提供程序,但它是一回事。我可以在同一台计算机上使用 C# 中的 Microsoft.Jet.OLEDB.4.0 提供程序打开数据库。
# -*- coding:Utf-8 -*-
import sys
import adodbapi
import argparse
__version__ = 1.0
debugmode = False
# Constantes de connection sur la base de donnees.
MDB = 'D:\lp_2012_3.mdb'
DRV = 'Microsoft.Jet.OLEDB.4.0'
PWD = ''
conn_string = r'Provider=%s; Data Source=%s' % (DRV,MDB)
def main():
#Connection a la base de donnees.
print('%s'%conn_string)
conn = adodbapi.connect(conn_string)
conn.autocommit = False
cur = conn.cursor()
#Definition de la requete
SQLselect = 'SELECT TOP 10 * FROM PERSONNE;'
# Lancement de la requete
record = cur.execute(SQLselect).fetchall()
#print('%s'%(type(cur.description)))
#Get columns name
entete = []
for fld in cur.columns('PERSONNE'):
entete.append(fld.column_name)
#print(fld.table_name, fld.column_name)
#print('%s'%(entete))
cur.close()
conn.close()
if (__name__ == '__main__'):
#Recupere les arguments transmis
parser = argparse.ArgumentParser()
parser.add_argument('-v', '--verbose', action = 'store_true', help = 'augmente la verbosité')
parser.add_argument('-l', '--log', action = 'store_true', help = 'active le mode log')
parser.add_argument('-d', '--debug', action='store_true', help='debug mode')
args = parser.parse_args()
#applique la configuration
if args.debug:
debugmode = True
sys.exit(main())
我有以下错误代码:
adodbapi.apibase.OperationalError: (InterfaceError("Windows COM Error: >Dispatch('ADODB.Connection') failed."), '打开连接时出错 >"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=D: \lp_2012_3.mdb"')
谢谢你的帮助。
PS:有些人还在使用MS-ACCESS。
解决方案
如果可以使用不同的模块...
我发现 pyodbc 模块与 adodbapi 模块相比,在最近的项目中使用这两种模块后问题要少得多。pyodbc 目前仍在维护中(与 adodbapi 不同,我被告知)并且有更好的文档。
如果您需要进行参数化查询,请确保使用 4.0.27 或更高版本,如此处讨论的https://github.com/mkleehammer/pyodbc/issues/509。
我已经使用 64 位 ACE 驱动程序(一旦正确安装)成功连接到 MS Access 2016,如下所示:
connectionString = (
f'Driver={{Microsoft Access Driver (*.mdb, *.accdb)}};DBQ={database_path};'
)
connection = odbc.connect(connectionString, autocommit = True)
双括号用于转义驱动程序名称周围所需的括号。
推荐阅读
- r - 使用正则表达式擦除已知可变长度字符串之后的所有内容
- reactjs - ARIA 属性是否有扩展/eslint?
- java - 解决问题的有效方法
- c - 为什么我在 Rust 中的 C strlen() 也会在 print 中计算字符串切片!`s`变量之后的宏?
- file - PERL 在 slurping 后关闭文件并将“perl -0777”转换为完整的 perl 文件
- python - TypeError:字段“id”需要一个数字,但得到了 OrderedDict
- php - 如何在 PHP 中将多个数组平均为一个?
- css - 如何在按钮的中心水平制作渐变
- r - 为什么我的条件式选择输入()失败了?
- html - 视频无法在所有浏览器上播放 (FFMPEG)