gpt4 book ai didi

python - 将 Docker 上的 SQL Server 连接到 Python

转载 作者:行者123 更新时间:2023-12-03 11:03:14 26 4
gpt4 key购买 nike

我正在尝试使用 pyodbc 在使用 Docker 托管的 SQL Server 2017 数据库上执行表创建。我也在使用网络,以便稍后可以从另一个 Docker 镜像连接到它。但是,我收到以下错误

pyodbc.OperationalError: ('HYT00', '[HYT00] [Microsoft][ODBC Driver 17 for SQL Server]Login timeout expired (0) (SQLDriverConnect)')

这就是我创建连接的方式。

要创建和运行数据库服务器,
docker run --name mssqldocker -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=<password>' -e 'MSSQL_PID=Express' -p 7000:7000 --network=lambda-local-mssql -v <my_path> -d mcr.microsoft.com/mssql/server:2017-latest-ubuntu

我也尝试添加
-h "mssqldocker"

到运行 Docker 镜像的命令,然后使用“mssqldocker”而不是 localhost,但无济于事,因为不匹配的主机名似乎是一起使用 DB 和 Docker 时反复出现的主题。还尝试添加 \sqlexpress也没有效果。 Python代码如下
import pyodbc
import sql_clauses
from settings import ENDPOINT, PORT, USERNAME, PASSWORD

cnxn = pyodbc.connect(
'DRIVER={ODBC Driver 17 for SQL Server}' +
';SERVER=' + ENDPOINT + ';UID=' + USERNAME +
';PWD=' + PASSWORD)

cursor = db.cursor()
cursor.execute(create_database(dbname))
cnxn.commit()
cnxn.close()
print("Database created")

设置文件如下
ENDPOINT="localhost"
PORT = 7000
USERNAME="SA"
PASSWORD=<password>

最佳答案

在您的 docker run您指定的命令 -p 7000:7000 .这意味着“将主机端口 7000(第一个 7000 - 已发布)映射到容器端口 7000(第二个 7000 - 公开)”。如果您在容器内的不同端口上运行 MSSQL(您可能这样做),那么您必须将第二个 7000 更改为正确的端口。

完成此操作后,您应该能够使用“localhost:7000”从主机连接到 MSSQL。如果您的 python 应用程序直接运行,这适用 在主机 .

如果你的python项目也在容器中运行 ,您需要确保它与 mssql 容器 ( --network=lambda-local-mssql ) 在同一网络上运行,然后您需要使用“mssqldocker:mssql_exposed_port”进行连接。在这种情况下,localhost 和 7000(`-p 7000:... 的第一部分)不再有效,因为您在 docker 管理的网络上。

关于python - 将 Docker 上的 SQL Server 连接到 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60221523/

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