气流,连接到MsSql错误“ Adaptive Server不可用或不存在”

时间:2019-02-17 06:27:32

标签: airflow

尝试使用Airflow进行get_records()时出现此错误。

pymssql.OperationalError:(20009,b'DB-Lib错误消息20009,严重性9:\ n无法连接:Adaptive Server不可用或不存在(localhost:无)\ n')

我使用了本指南来进行设置。 https://tech.marksblogg.com/mssql-sql-server-linux-install-tutorial-and-guide.html

使用Python REPL,我可以连接并返回结果。

with pymssql.connect(server="localhost",
                 user="SA",
                 password="password",
                 database="database_name") as conn:
df = pd.read_sql("SELECT TOP 1 * FROM currency", conn)
print(df)

with pymssql.connect(server="127.0.0.1",
                 user="SA",
                 password="password",
                 database="database_name") as conn:
df = pd.read_sql("SELECT TOP 1 * FROM currency", conn)
print(df)

我使用这些设置之一更新我的气流连接并运行测试。

 airflow test run_test_db test_database 2015-06-01

产生错误。...

有什么想法吗?整个设置包含在一台linux(无用)计算机中,没有虚拟环境。...因此,它使用相同版本的pymssql尝试连接。...

编辑更新

真正令人讨厌的是,如果我在DAG中使用相同的连接字符串,则没有错误,并且运行得很好...

因此必须更改从数据库检索的连接字符串。

是否可以调试/打印字符串/连接属性?

工作DAG示例

from airflow import DAG
from airflow.operators.python_operator import PythonOperator
from airflow.hooks.mssql_hook import MsSqlHook
from datetime import datetime, timedelta
import pymssql 
import pandas as pd

default_args = {
    'owner': 'airflow',
    'depends_on_past': True,
    'start_date': datetime(2019, 2, 13),
    'email': ['example@email.com'],
    'email_on_failure': False,
    'email_on_retry': False,
    'retries': 1,
    'retry_delay': timedelta(minutes=5),
}

dag = DAG('run_test_db', default_args=default_args, schedule_interval="0 01 * * 2-6")


def test_db(**context):
    with pymssql.connect(server="localhost",
                    user="SA",
                    password="Password123",
                    database="database") as conn:
                    df = pd.read_sql("SELECT TOP 1 * FROM champ_dw_dim_currency", conn)
                    print(df)

test_database = PythonOperator(
    task_id='test_database',
    python_callable=test_db,
    execution_timeout=timedelta(minutes=3),
    dag=dag,
    provide_context=True,
    op_kwargs={
        'extra_detail': 'nothing'
    })

0 个答案:

没有答案