Airflow, Connecting to MsSql ошибка «Adaptive Server недоступен или не существует» - PullRequest
0 голосов
/ 17 февраля 2019

Я получаю эту ошибку при попытке использовать 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 с помощью одной из этих настроек и запускаю тест.

 airflow test run_test_db test_database 2015-06-01

Произошла ошибка ....

Есть идеи, пожалуйста?Вся установка содержится в одной машине linux (vagrant), а не в виртуальных средах ... Так что она использует ту же версию pymssql для попытки подключения ....

РЕДАКТИРОВАТЬ ОБНОВЛЕНИЕ

Что действительно раздражает, так это то, что если я использую ту же строку подключения в группе обеспечения доступности баз данных, ошибки не возникает, и она отлично работает ...

Поэтому строка подключения, полученная из базы данных, должнаизменить.

Есть ли способ отладки / печати строки / свойств соединения?

Пример работы 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'
    })
...