我正在尝试使用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。
1条答案
按热度按时间jdgnovmf1#
这是ODBC驱动程序18描述的连接字符串和证书的问题。
用于从运行应用程序的主机连接到运行SQL服务器的Docker容器的最终连接字符串为: