gpt4 book ai didi

python - 无法打开库 'ODBC Driver 17 for SQL Server' : file not found

转载 作者:太空宇宙 更新时间:2023-11-03 19:55:47 24 4
gpt4 key购买 nike

我对 Python 和 Azure Web 应用程序相当陌生。如有任何帮助,我们将不胜感激。

我的设置:

  • 程序:Visual Studio 代码
  • 语言:Python-Flask
  • 云提供商:Microsoft Azure
  • 数据库:Azure SQL DB
  • 部署选项:Docker 镜像 > Azure 容器注册表 > 将镜像部署到 Web 应用
  • 网络应用操作系统:Linux(我认为是 Alpine?)

在我的代码中,我使用 pyodbc连接到 Azure SQL 数据库。代码在终端本地成功运行。但是,当它在网络上运行时,遇到以下错误:

Error: ('01000', "[01000] [unixODBC][Driver Manager]Can't open lib 'ODBC Driver 17 for SQL Server' : file not found (0) (SQLDriverConnect)")

我遵循了几篇故障排除帖子,但是没有成功。

我尝试使用 $sudo ln 创建符号链接(symbolic link),但导致权限被拒绝。我认为这是 Azure Web 应用程序的一个已知限制。

我尝试在 etc/odbcinst.ini 中查找驱动程序以查看驱动程序名称是否存在,但是,我对 Azure/VS Code 还很陌生,所以我什至不知道如何打开、etc/文件夹。当我导航到 etc/文件夹时,我确实在 BASH 命令提示符中看到了它,但不确定如何打开该文件。

我在 BASH 中运行了以下命令安装PYODBC ,但这并没有解决问题。

python -m pip install pyodbc

结果来自odbcinst -j

    unixODBC 2.3.4
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /home/a49d42b0d7b8ce200a4f7e74/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8

我的docker文件:

# Pull a pre-built alpine docker image with nginx and python3 installed
FROM tiangolo/uwsgi-nginx-flask:python3.6-alpine3.7

ENV LISTEN_PORT=8000
EXPOSE 8000

COPY /app /app

# Uncomment to install additional requirements from a requirements.txt file
COPY requirements.txt /
RUN pip install --no-cache-dir -U pip
RUN pip install --no-cache-dir -r /requirements.txt

RUN apk add g++
RUN apk add unixodbc-dev
RUN pip install pyodbc

我的要求.txt。我注释掉了pyodbc ;我认为这没问题,因为我将其安装在 docker 文件中。

click==6.7
Flask==0.12.2
itsdangerous==0.24
Jinja2==2.10
MarkupSafe==1.0
Werkzeug==0.14.1
#pyodbc==4.0.28

其他问题:

  1. 我应该使用 PYODBC 吗?或者我应该使用更好/更兼容的东西?
  2. 我应该使用 MYSQL 而不是 Azure SQL DB 吗?
  3. 我有办法打开 odbcinst.ini网络应用程序上的文件?

最佳答案

首先,如果你想知道你的docker中的操作系统版本是什么,你可以命令 cat /etc/os-release获取它,比如在我的ubuntu中运行它,如下图。

enter image description here

在这里,我确定您的 Web 应用程序操作系统是 Alpine Linux,因为您的 docker 文件的第一行 FROM tiangolo/uwsgi-nginx-flask:python3.6-alpine3.7 。您的基础镜像基于 Alpine 3.7。

二、根据你的错误信息Error: ('01000', "[01000] [unixODBC][Driver Manager]Can't open lib 'ODBC Driver 17 for SQL Server' : file not found (0) (SQLDriverConnect)")以及 docker 文件的内容和 requirements.txt ,我认为该问题是由于缺少适用于 Linux 的 MS SQL Server ODBC 驱动程序引起的,该驱动程序未安装在您的 docker 镜像中,但是 pyodbc需要它连接 Azure SQL 数据库。

但是,对于ODBC Driver 17 for SQL Server ,官方文档 Installing the Microsoft ODBC Driver for SQL Server on Linux and macOS 显示 Alpine 尚未发布 v17 软件包。因此,解决方法是将 DockerHub 基础镜像从 tiangolo/uwsgi-nginx-flask:python3.6-alpine3.7 更改为至tiangolo/uwsgi-nginx-flask:python3.6使用debian作为操作系统,那么您可以轻松地在其中安装MS ODBC driver 17 for SQL Server。

对于您的其他问题,如下。

  1. 除了使用pyodbc , pymssql是Python SQL Driver的另一种,请参见官方文档 Python SQL Driver ,但是 The Pymssql Project is Being Discontinued 。和 SQLAlchemy 因为ORM框架可以用来连接Azure SQL数据库,这也需要pyodbcpymssql .

  2. 使用 MySQL 或 Azure SQL 数据库,由您决定。我认为唯一的区别是 MySQL 可能比 Alpine 中的 Azure SQL DB 更容易安装。

  3. 打开方式odbcinst.ini webapp 上的文件是通过 SSH 使用 vim 连接到您的 docker 操作系统。考虑到您使用的自定义 docker 镜像,请参阅 Enable SSH 部分官方文档Configure a custom Linux container for Azure App Service并替换命令 apkapt适用于 Debian Linux。

关于python - 无法打开库 'ODBC Driver 17 for SQL Server' : file not found,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59548152/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com