尝试使用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'
})