连接字符串中的 PYODBC 传递变量

Posted

技术标签:

【中文标题】连接字符串中的 PYODBC 传递变量【英文标题】:PYODBC pass variable in connection string 【发布时间】:2021-09-07 17:40:24 【问题描述】:

我正在尝试使用 pyodbc 连接到 MS Access 数据库 (.mdb)。以下连接字符串正常工作:

conn = pyodbc.connect(r'Driver=Microsoft Access Driver (*.mdb, *.accdb);'
                      r'DBQ=\\abc123.org\Team\Resources\Inputs\Accounts.mdb;')

我需要遍历几个文件,所以我试图为文件路径传递一个变量。变量将来自列表,但作为示例:

file_path1 = '\\abc123.org\Team\Resources\Inputs\Accounts.mdb'

conn = pyodbc.connect(r'Driver=Microsoft Access Driver (*.mdb, *.accdb);DBQ=;').format(file_path1)

我收到以下错误: 错误: ('HY000', '[HY000] [Microsoft][ODBC Microsoft Access Driver] 不是有效的文件名。(-1044) (SQLDriverConnect); [HY000] [Microsoft][ODBC Microsoft Access Driver] 不是有效的文件名称。(-1044)')

我在尝试时收到同样的错误:

conn = pyodbc.connect(r'Driver=Microsoft Access Driver (*.mdb, *.accdb);DBQ=%s;') % file_path1

对于如何将文件路径作为连接字符串中的变量传递的任何帮助,不胜感激,谢谢!

【问题讨论】:

只是文件路径file_path1 = '\\abc123.org\Team\Resources\Inputs\Accounts.mdb'前面少了r the rawstring吗?你查了吗? 我尝试了以下方法:file_path1 = r'\\abc123.org\Team\Resources\Inputs\Accounts.mdb' 仍然收到相同的错误 【参考方案1】:

我想我明白了。

file_path1 = '\\abc123.org\Team\Resources\Inputs\Accounts.mdb'

conn = pyodbc.connect(r'Driver=Microsoft Access Driver (*.mdb, *.accdb);DBQ=;'.format(file_path1))
                                                                                  #^ format method is call on the string

你能看出区别吗?

您所做的是在connect 方法上调用格式。 您第二次尝试也有同样的问题

conn = pyodbc.connect(r'Driver=Microsoft Access Driver (*.mdb, *.accdb);DBQ=%s;' % file_path1)
                                                                                              #^ I have moved the parenthesis 

【讨论】:

【参考方案2】:

谢谢@Paulo - 我使用你的回复和 pathlib 来解决这个问题:

import pathlib
file_path1 = pathlib.Path(r'\\abc123.org\Team\Resources\Inputs\Accounts.mdb')
conn = pyodbc.connect(r'Driver=Microsoft Access Driver (*.mdb, *.accdb);DBQ=%s;' % file_path1)

【讨论】:

以上是关于连接字符串中的 PYODBC 传递变量的主要内容,如果未能解决你的问题,请参考以下文章

SqlAlchemy 等效于使用 FreeTDS 的 pyodbc 连接字符串

使用 pyodbc 模块的连接字符串不适用于 Enthought Python Distribution

无法使用 pyodbc 库连接到 Azure 数据库

动态传递实体连接字符串 - 具有多个环境的多个实体

删除先前已连接其他变量的字符串中的重复单词

pyodbc/sqlalchemy - 使用 pd.read_sql_query 读取表中的每一列。通过查询传递变量