Я получаю эту ошибку при попытке использовать 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'
})