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

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

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

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

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

  1. # !/usr/bin/env python3
  2. import sqlalchemy
  3. import urllib
  4. print("Start")
  5. params = urllib.parse.quote_plus("Driver={ODBC Driver 18 for SQL Server};Server=tcp:localhost:1433;Uid=SA;Pwd=YourStrong_Passw0rd;")
  6. print(f"params: {params}")
  7. connection_str = f"mssql+pyodbc:///?odbc_connect=%s" % params
  8. engine = sqlalchemy.create_engine(connection_str)
  9. print("Trying connecting")
  10. engine.connect()
  11. print("Connected")
  12. metadata = sqlalchemy.MetaData(bind=engine)
  13. metadata.reflect(only=['test_table'])
  14. print(metadata.tables)

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

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

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

jdgnovmf

jdgnovmf1#

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

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

相关问题