我正在尝试使用 pyodbc 连接到受密码保护的 Access 数据库。密码是根据文件名创建的,可能包含特殊字符。在调用 .connect() 方法之前,我已确保连接字符串正确。
import pyodbc
conn_str = r"DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\Users\user\PW issue\test.accdb;PWD=abc{123"
conn = pyodbc.connect(conn_str)
我收到以下错误(缩短版本 - 它仅从“[HY000]”部分重复 2 次:
错误:('HY000',“[HY000] [Microsoft][ODBC Microsoft Access 驱动程序]一般错误无法打开注册表项临时(易失性) 进程 0x5f80 线程 0x5a54 DBC 0x96f3be58 的 Ace DSN
喷射'。 (63) (SQLDriverConnect)")
我试图理解许多来源,例如这里的数十篇类似的帖子,以及其他地方,例如: https://www.connectionstrings.com/formating-rules-for-connection-strings/
据我所知,问题可能是驱动程序如何解释连接字符串,而不是我如何在 python 中构造它。 我确信自己会引起问题的两个字符是“{”和“%”。我主要尝试集中精力解决仅包含“{”的文件的问题。 对于不包含这 2 个的任何密码,连接字符串都可以正常工作。
创建不同的密码不是一个选项。
密码示例为:“abc{123” 我已经在连接字符串中尝试过:
您似乎遇到了 MS Access ODBC 驱动程序的缺陷。使用其他 ODBC 驱动程序(例如“ODBC Driver 17 for SQL Server”)时,密码中的左大括号不是问题,除非它是密码的第一个字符。那么,登录 SQL Server
UID=john;PWD=abc{123;
效果很好。如果约翰的密码是
{abc
那么他必须使用
UID=john;PWD={{abc};
此外,MS Access OLEDB 提供程序可以打开密码为
abc{123
的数据库
connStr = _
"Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=C:\Users\Public\zzz_test.accdb;" & _
"Jet OLEDB:Database Password=abc{123;"
所以这是 Access ODBC 驱动程序的问题。