Python pyodbc Microsoft Access Driver 连接密码问题

问题描述 投票:0回答:1

我正在尝试使用 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” 我已经在连接字符串中尝试过:

  1. “...;{PWD=abc{123}”
  2. “...;'PWD=abc{123'”
  3. “...;PWD=abc{{123”
  4. “...;PWD=abc'{123”
  5. “...;PWD={abc'{123}”
  6. “...;PWD={abc{{123}” 我可能也尝试过其他一些组合。正如一个消息来源所说,通过加倍“{”来转义它,而另一个消息来源则表示必须使用 {} 转义整个密码。然后,其他人又说将密码用单引号引起来,还有人说用单引号转义特殊字符。所以出于绝望,我尝试了他们的组合。
python ms-access pyodbc
1个回答
0
投票

您似乎遇到了 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 驱动程序的问题。

© www.soinside.com 2019 - 2024. All rights reserved.