我正在使用Python和Flask开发一个web应用程序。
我的应用程序使用pyobdc访问Microsoft SQL Server。它在本地运行。
当我将它部署到Azure应用程序服务并使用该应用程序时,当它需要访问服务器时,它会崩溃,给我这个错误:
pyodbc.Error: ('01000', "[01000] [unixODBC][Driver Manager]Can't open lib 'ODBC Driver 17 for SQL Server' : file not found (0) (SQLDriverConnect)")
随机细节:
-
Azure Python版本:3.8.12
-
Linux详细信息:Debian GNU/Linux 9(拉伸(
我尝试使用Azure应用程序服务中的kudu bash终端,使用此ODBC驱动程序linux链接中的说明手动安装它。但当我尝试时,它告诉我sudo不是命令。(这是关于Azure限制还是IT权限的问题?(
我还尝试升级到适用于SQL Server的ODBC驱动程序18,但没有成功。
我在一些地方读到,Microsoft Azure应用程序服务不支持ODBC,也不支持安装ODBC。
这是真的吗?有办法解决这个问题吗?
有没有其他方法可以将MS SQL Server连接到azure上部署的python flask web应用程序?
我还检查了/etc中的odbc.ini和odbcinst.ini文件,发现它们是空的。
好的,我解决了我的问题。
我通过dockerfile安装了用于SQL Server的ODBC驱动程序17。我使用了关于如何使用ODBC 17 Debian版本安装的说明。但由于一些错误,它没有完全工作,所以我稍微修改了一下。
这是我添加到我的docker中的内容:
#What I added to deal with the errors I was getting:
RUN apt-get update -y
RUN apt install unixodbc -y
#Installation instructions from microsoft link:
RUN su
RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
RUN curl https://packages.microsoft.com/config/debian/9/prod.list > /etc/apt/sources.list.d/mssql-release.list
RUN exit
RUN apt-get update
RUN ACCEPT_EULA=Y apt-get install -y msodbcsql17
RUN ACCEPT_EULA=Y apt-get install -y mssql-tools
#Checking the installation
RUN cat /etc/odbcinst.ini
#Create the odbc.ini file
RUN echo -e '[voip]nDescription = whatevernDriver = ODBC Driver 17 for SQL ServernServer = whatevernUser = whatevernPassword = whatevernPort = whatevernDatabase = whatever' > odbc.ini
#Moving odbc.ini to the etc directory
RUN mv odbc.ini etc
#Checking contents of odbc.ini
RUN cat /etc/odbc.ini
我不得不自己编辑odbc.ini,因为它是空的。但是odbcinst.ini应该在运行微软指令提供的命令之后填充。
etc/odbcinst.ini应该有这样的内容:
[ODBC Driver 17 for SQL Server]
Description=Microsoft ODBC Driver 17 for SQL Server
Driver=/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.10.so.1.1
UsageCount=1
etc/odbc.ini应该是这样的:
[voip]
Description = whatever
Driver = ODBC Driver 17 for SQL Server
Server = whatever
User = whatever
Password = whatever
Port = whatever
Database = whatever
如果您有这个问题,您必须自己编辑odbc.ini。但我所做的是创建一个odbc.ini文件。然后把它移到等等。