Airflow 使用代码,如何更新气流变量?

Airflow 使用代码,如何更新气流变量?,airflow,Airflow,我需要以编程方式更新我在Airflow中创建的变量,但我找不到关于如何使用代码进行更新的答案 我已使用以下代码检索我的变量: column\u number=Variable.get('column\u number') 在函数的末尾,我想将列_编号增加1 我试过这个: 变量。设置值(“列号”,int(列号)+1) 而且它不起作用 以下是完整的代码供参考: import airflow from datetime import datetime, timedelta from random im

我需要以编程方式更新我在Airflow中创建的变量,但我找不到关于如何使用代码进行更新的答案

我已使用以下代码检索我的变量:

column\u number=Variable.get('column\u number')

在函数的末尾,我想将列_编号增加1

我试过这个:
变量。设置值(“列号”,int(列号)+1)

而且它不起作用

以下是完整的代码供参考:

import airflow
from datetime import datetime, timedelta
from random import randint
from airflow import DAG
from airflow.hooks.postgres_hook import PostgresHook
from airflow.models import Variable
from airflow.operators.python_operator import PythonOperator

args = {
    'owner': 'besteman',
    'start_date': datetime.utcnow(),
    'retries': 1,
    'retry_delay': timedelta(minutes=30)
}

dag = DAG(dag_id='test-postgres', default_args=args, schedule_interval='@hourly')

def add_columns_and_values():

    column_number = Variable.get('column_number')

    pg_hook = PostgresHook(postgres_conn_id='airflow-test')

    add_columns = f'ALTER TABLE students ADD COLUMN test{column_number} smallint;'

    pg_hook.run(add_columns) 

    for i in range(8):
        add_values = f"UPDATE students SET test{column_number} = '{randint(50, 100)}' WHERE id = {i+1};"
        pg_hook.run(add_values)

    Variable.set_val("column_number", int(column_number) + 1)


t1 = PythonOperator(task_id='add_columns_values',
    python_callable=add_columns_and_values,
    dag=dag)

使用
Variable.set
而不是
Variable.set\u val
set_val()
val
属性的设置器,不供外部使用。这应该满足您的要求:

Variable.set("column_number", int(column_number) + 1)
它将实际更新数据库,并在需要时为您处理会话和序列化

参考: