【发布时间】:2019-12-03 23:09:04
【问题描述】:
我使用 docker 镜像创建了一个 airflow 环境,在 docker 镜像中我安装了 unixodbc-dev 库。
现在气流环境运行良好,dags 运行良好,但是当我使用 python 运算符通过pyodbc 连接时。我正在尝试使用以下方式连接:
conn = pyodbc.connect("Driver{FreeTDS};Server=servername,1433;Database=dbname;Uid=username;Pwd=pass;")
不起作用并抛出错误:
('01000', "[01000] [unixODBC][驱动管理器]无法打开 lib 'FreeTDS' : 找不到文件 (0) (SQLDriverConnect)")。
【问题讨论】:
-
我的理解是在构建docker镜像时我没有将odbcinsti.ini文件包含在docker镜像中,如何将它包含在docker镜像中?在那个图像中应该是什么我发现我有这个包含这个内容的文件,它会做吗?文件内容:[FreeTDS]Description=FreeTDS Driver Driver=/usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so Setup=/usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
-
你安装了 FreeTDS 吗?该 FreeTDS 驱动程序文件是否真的存在?如果没有,您可能需要使用命令from this Gist if you're on Ubuntu:
sudo apt-get install freetds-dev freetds-bin unixodbc-dev tdsodbc。您也可以尝试关注pyodbc's guide for connecting to SQL Server from Linux 以改用微软的驱动程序。我对 Docker 不太熟悉,所以我不确定您还需要做什么才能使其正常工作。 -
见我提到我没有添加 TDS 驱动程序,我的理解是我需要在 docker 镜像中添加这个文件,odbcinst.ini 它将有这样的内容:[FreeTDS]Description= FreeTDS 驱动程序驱动程序=/usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so 安装程序=/usr/lib/x86_64-linux-gnu/odbc/libtdsS.so 。现在我想知道这会起作用吗?路径是否正确?此外,如果我安装所有这些“sudo apt-get install freetds-dev freetds-bin unixodbc-dev tdsodbc”,我是否需要添加任何 odbcinst.in,我想再次使用连接字符串通过 pyodbc 连接到 sql 服务器提到过。谢谢
-
当您添加
odbcinst.ini时,您所包含的那些路径需要指向实际文件。您需要安装 FreeTDS 软件包,并存在odbcinst.ini文件。我认为您列出的路径是正确的,因此请查看是否可以安装这些路径并将文件添加到您的图像中。再说一次,我不是 100% 确定 Docker,但我通过这些步骤在 Ubuntu 18.04 上完成了这项工作。 -
是的,你是对的!我犯了那个错误,但即使在改变之后,它也不起作用!但是经过大量尝试并安装了很多库后,它现在可以正常工作了!我可以使用 pyodbc 连接到 SQL Server!我将在答案中分享代码!非常感谢您的帮助! :)
标签: python docker airflow pyodbc freetds