sql-server 访问mssql微软SQL服务器上的docker与sqlalchemy flask

mmvthczy  于 2022-10-31  发布在  Docker
关注(0)|答案(1)|浏览(162)

我正在尝试使用sqlalchemy和flask连接到docker容器中的mssql服务器。
我使用以下代码创建了Docker容器:

sudo docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=YourStrong_Passw0rd" -e "MSSQL_PID=Developer" -e "MSSQL_AGENT_ENABLED=True" \
   -p 1433:1433 --name sql1 --hostname sql1 \
   -d \
   mcr.microsoft.com/mssql/server:2019-latest

如X1E0F1X所解释的。
然后我尝试使用一个简单的python脚本和sqlalchemy连接到服务器。
该脚本的代码如下所示。


# !/usr/bin/env python3

import sqlalchemy
import urllib
print("Start")
params = urllib.parse.quote_plus("Driver={ODBC Driver 18 for SQL Server};Server=tcp:localhost:1433;Uid=SA;Pwd=YourStrong_Passw0rd;")
print(f"params: {params}")
connection_str = f"mssql+pyodbc:///?odbc_connect=%s" %  params

engine = sqlalchemy.create_engine(connection_str)
print("Trying connecting")
engine.connect()
print("Connected")

metadata = sqlalchemy.MetaData(bind=engine)
metadata.reflect(only=['test_table'])

print(metadata.tables)

我只是想检查我是否能够连接,然后使用和访问数据库。但是,脚本在engine.connect()行出现错误。
我收到的错误是:

sqlalchemy.exc.OperationalError: (pyodbc.OperationalError) ('HYT00', '[HYT00] [Microsoft][ODBC Driver 18 for SQL Server]Login timeout expired (0) (SQLDriverConnect)')
(Background on this error at: https://sqlalche.me/e/14/e3q8)

我错过了什么?
我尝试更改连接字符串,并尝试使用“as”代替“SA”或本地主机名,但没有成功。我使用的是Ubuntu 22.04。

jdgnovmf

jdgnovmf1#

这是ODBC驱动程序18描述的连接字符串和证书的问题。
用于从运行应用程序的主机连接到运行SQL服务器的Docker容器的最终连接字符串为:

"Driver={ODBC Driver 18 for SQL Server};Server=tcp:localhost,1433;Uid=SA;Pwd=YourStrong_Passw0rd;TrustServerCertificate=yes;"

相关问题