PYODBC连接Access数据库时如何在连接字符串中传入路径变量
问题原因分析
- 格式化操作顺序错误:你将
format()、%格式化操作写在了pyodbc.connect()函数的括号外侧,执行逻辑变成了先把未填充路径的不完整连接字符串传入connect触发报错,再对返回的连接对象做格式化,完全不符合预期。 - 路径字符串未做转义处理:定义
file_path1时没有添加原始字符串前缀r,路径中的反斜杠会被Python识别为转义字符,导致实际传入的路径和预期不一致。
正确实现方式
方法1:先格式化连接字符串再传入connect(format写法)
# 路径字符串加r前缀避免转义 file_path1 = r'\\abc123.org\Team\Resources\Inputs\Accounts.mdb' # 先完成字符串格式化,再传入connect函数 conn_str = r'Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ={};'.format(file_path1) conn = pyodbc.connect(conn_str)
方法2:使用f-string格式化(Python3.6及以上推荐)
file_path1 = r'\\abc123.org\Team\Resources\Inputs\Accounts.mdb' conn_str = rf'Driver={{Microsoft Access Driver (*.mdb, *.accdb)}};DBQ={file_path1};' conn = pyodbc.connect(conn_str)
方法3:%格式化的正确写法
file_path1 = r'\\abc123.org\Team\Resources\Inputs\Accounts.mdb' conn_str = r'Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=%s;' % file_path1 conn = pyodbc.connect(conn_str)
方法4:关键字参数传参(最稳妥,避免特殊字符问题)
如果路径包含分号等特殊字符,手动拼接字符串容易出错,直接用pyodbc支持的关键字参数传入配置项即可:
file_path1 = r'\\abc123.org\Team\Resources\Inputs\Accounts.mdb' conn = pyodbc.connect( r'Driver={Microsoft Access Driver (*.mdb, *.accdb)};', DBQ=file_path1 )
内容的提问来源于stack exchange,提问作者Scott Thompson
相关产品推荐
相关产品推荐

