我在 github 上发现了一个相关问题,但它在 msphpsql 存储库下,所以我不确定它是否适用于 alpine 的一般驱动程序。它说 MS 还不支持。
MS 官方安装页面只有 Debian、RedHat、SUSE、Ubuntu 的安装说明。
如果有任何解决方法,请提出建议。
如果这是不可能的,请尽可能从技术上详细说明您的答案。我在任何地方都找不到这个问题的合适答案。
我已经安装了:
我只想使用 SQLAlchemy 和 Azure SQL 数据仓库创建一个概念证明。但是,当我尝试使用以下代码对映射到客户视图表的客户模型运行查询时:
import urllib
from sqlalchemy import create_engine
from sqlalchemy import Column, Integer
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
db_username = 'username'
db_password = 'password'
db_database = 'dbname'
db_hostname = 'dbhost'
db_driver = 'ODBC Driver 17 for SQL Server'
db_port = '1433'
db_connectionString = f"DRIVER={{{db_driver}}}; SERVER={{{db_hostname}}}; DATABASE={{{db_database}}}; UID={{{db_username}}}; PWD={{{db_password}}}; PORT={{{db_port}}};"
engine_params = urllib.parse.quote_plus(db_connectionString)
engine = create_engine(f"mssql+pyodbc:///?odbc_connect={engine_params}", echo=True) …Run Code Online (Sandbox Code Playgroud) 仅当尝试从在 OpenShift 容器中运行的 Python 3.7 连接到我的 Azure DB 时(来自 rhel7:latest),我看到以下错误:
sqlalchemy.exc.DBAPIError: (pyodbc.Error) ('IM004', "[IM004][unixODBC][Driver Manager]Driver's SQLAllocHandle on SQL_HANDLE_HENV failed (0) (SQLDriverConnect)
Run Code Online (Sandbox Code Playgroud)
我在我的 MAC、Windows 和运行 RHEL7 基本容器的 RHEL7 Virtualbox 上的 Docker 中尝试了完全相同的代码 - 它始终有效!问题仅出现在我在 OpenShift 中运行的容器中!我检查了我可以在 1433 年从 Openshift telnet 到我的 Azure DB 服务器。
我也启用了 ODBC 日志,但没有比上述错误更多的信息。
我还应该检查什么?
以下是我在 Dockerfile 中设置 MSODBC 驱动程序的方法:
RUN curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/mssql-release.repo && \
yum remove unixODBC-utf16 unixODBC-utf16-devel && \
ACCEPT_EULA=Y yum install -y msodbcsql17 && \
yum install -y unixODBC-devel
Run Code Online (Sandbox Code Playgroud)
这是引发错误的代码:
在modules.database里面:
pyodbc_connstring_safe = …Run Code Online (Sandbox Code Playgroud) pyodbc python-3.x azure-sql-database openshift-3 msodbcsql17
msodbcsql17 ×3
pyodbc ×2
alpine-linux ×1
docker ×1
openshift-3 ×1
python ×1
python-3.x ×1
sqlalchemy ×1