无法在Centos 7服务器上使用pyodbc为气流设置SQL Server后端。

问题描述 投票:0回答:1

我正在尝试设置SQL Server后台的气流。但是得到这个超时的错误,当我做了 airflow initdb:

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

我的连接字符串在 airflow.cfg 看起来像。

sql_alchemy_conn = mssql+pyodbc://user:[email protected],1433/test_db?driver=ODBC+Driver+17+for+SQL+Server

我安装了odbc驱动,使用。https:/docs.microsoft.comen-ussqlconnectodbclinux-macinstalling-the-microsoft-odbc-driver-for-sql-server? view=sql-server-ver15#microsoft-odbc-driver-13-for-sql-server。

我的 odbcinst.ini 文件的样子。

[ODBC Driver 17 for SQL Server]
Description=Microsoft ODBC Driver 17 for SQL Server
Driver=/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.5.so.2.1
UsageCount=1

我看了这些帖子

Pyodbc: 登录超时错误

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

通过sqlalchemy和pyodbc访问MS SQL数据库时,出现 "登录超时已过 "的错误。

远程连接到MS SQL--使用pyodbc出错与使用SQL Server Management Studio成功的对比。

这些解决方法大多是关于:用SQL Server IP代替实例名,用IP追加端口。但是,我已经在尝试用这种方式连接了。

当我试图通过python venv使用连接到sql server时。

import pyodbc
server = 'xx.xx.xx.xx'
database = 'test_db'
username = 'user'
password = 'password'
port = '1433'
cnxn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER='+server+';PORT='+port+';DATABASE='+database+';UID='+username+';PWD='+ password)
cursor = cnxn.cursor()

我也尝试了上述没有端口的连接字符串 仍然得到同样的超时错误。

任何关于这个问题的帮助将被感激。谢谢。

sql-server odbc airflow centos7 pyodbc
1个回答
0
投票

我想看看你的连接字符串。

首先,在你的例子中,有一个排版错误,你在定义你的 PORT 变量......但根据你选择的SQL Server驱动,连接字符串的形状似乎有所不同。尽管你使用的是ODBC驱动,但你看起来使用的是pymssql格式而不是pyodbc。

来自SQLALchemy文档 https:/docs.sqlalchemy.orgen13coreengines.html#microsoft-sql-server。

# pyodbc
engine = create_engine('mssql+pyodbc://scott:tiger@mydsn')

# pymssql
engine = create_engine('mssql+pymssql://scott:tiger@hostname:port/dbname')

0
投票

这个问题通过内部请求得到了解决,是防火墙的问题。

© www.soinside.com 2019 - 2024. All rights reserved.