Airflow 通过python操作符检查气流连接列表

Airflow 通过python操作符检查气流连接列表,airflow,Airflow,在执行DAG之前,我想检查连接列表中是否存在特定的连接id。我没有任何保持连接的机制。即使我通过GUI创建连接,当服务器重新启动时,所有连接都会被删除 下面是我认为应该添加的任务,但在运行该任务时出现了一个ascii错误,可能是因为该命令返回的表可能未被记录器充分解析 def create_connection(**kwargs): print(kwargs.get('ds')) list_conn = BashOperator( task_id='list_connectio

在执行DAG之前,我想检查连接列表中是否存在特定的连接id。我没有任何保持连接的机制。即使我通过GUI创建连接,当服务器重新启动时,所有连接都会被删除

下面是我认为应该添加的任务,但在运行该任务时出现了一个ascii错误,可能是因为该命令返回的表可能未被记录器充分解析

def create_connection(**kwargs):
    print(kwargs.get('ds'))

list_conn = BashOperator(
    task_id='list_connections',
    bash_command='airflow connections --l',
    xcom_push=True)

conns = list_conn.execute(context=kwargs)
logging.info(conns)

if not conns:
    new_conn = Connection(conn_id='xyz', conn_type='s3',
                          host='https://api.example.com')
    session = settings.Session()
    session.add(new_conn)
    session.commit()
    logging.info('Connection is created')
问:有没有办法让我知道DAG本身是否添加了连接。如果它已经存在,那么我不会创建新的连接。

会话。查询(连接)
应该可以做到这一点

def list_connections(**context):
    session = settings.Session()
    return session.query(Connection)

list_conn = PythonOperator(
    task_id='list_connections',
    python_callable=list_connections,
    provide_context=true,
)

请确保所有代码都包含在任务中。或者为了正确表述,它们应该在
运行时执行,而不是在
加载时执行。直接在DAG文件中添加代码会导致它在加载期间运行,这是不推荐的

公认的答案非常有效。我有一个场景,我需要通过连接id获得一个连接来创建DAG。因此,我必须在任务之外,在DAG创建本身中获得它。 以下代码适用于我:

from airflow.hooks.base_hook import BaseHook

conn = BaseHook.get_connection(connection)

希望这可能会对某人有所帮助!:)

由于您已经导入了连接,
session.query(Connection)
应该列出所有有效的连接。如果你想把答案贴出来,我会接受的。