使用pyodbc连接含{特殊字符的Access数据库失败求助
解决pyodbc连接含
{的Access数据库密码问题 问题描述
使用pyodbc连接带密码保护的Access数据库,密码由文件名生成(示例:abc{123),连接字符串格式正确,但执行连接时触发错误:
Error: ('HY000', "[HY000] [Microsoft][ODBC Microsoft Access Driver]General error Unable to open registry key Temporary (volatile) Ace DSN for process 0x5f80 Thread 0x5a54 DBC 0x96f3be58
Jet'. (63) (SQLDriverConnect)")
排查确认:问题源于Access ODBC驱动的连接字符串解析逻辑,而非Python字符串构造;{、%这类特殊字符会触发错误,无特殊字符的密码可正常连接。
已尝试的无效写法
...;{PWD=abc{123}...;'PWD=abc{123'...;PWD=abc{{123...;PWD=abc'{123...;PWD={abc'{123}...;PWD={abc{{123}
正确解决方案
针对含{的密码,需遵循Access ODBC驱动的双重转义规则:
- 密码中的单个
{替换为{{(双写转义) - 用大括号
{}包裹整个转义后的密码
对应示例密码的正确代码:
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)
原理
ODBC连接字符串中,大括号用于标记包含特殊语法字符的参数值,防止驱动将其误判为连接字符串的分隔符;参数值内部的大括号必须双写,才能被驱动识别为普通字符,否则会触发语法解析错误,导致临时DSN创建失败。
内容的提问来源于stack exchange,提问作者balintkovacs14
相关产品推荐
相关产品推荐

