Vladyslav
Vladyslav

Reputation: 103

How to Pull XCOM value in PostgresOperator

Here I am pushing XCOM value:

task_get_username_bash = BashOperator(
                task_id='execute_bash',
                bash_command='whoami',
                xcom_push=True)

So in XCOMs it stores like {'return_value' : '$USER'} (in my case $USER = 'airflow').

Then I want to pull this return_value from XCOM:

task_insert_new_row = PostgresOperator(
                task_id='insert_new_row',
                trigger_rule=TriggerRule.ALL_DONE,
                sql='''INSERT INTO table_name VALUES
                (%s, %s, %s);''',
                parameters=(uuid.uuid4().int % 123456789,
                            "{{ ti.xcom_pull(task_ids='execute_bash', key='return_value') }}",
                            datetime.now()))

But PostgresOperator interpret Macros reference as str. How to pull XCOM in PostgresOperator?

Upvotes: 4

Views: 5427

Answers (1)

Vladyslav
Vladyslav

Reputation: 103

Problem solved:

task_insert_new_row = PostgresOperator(
                task_id='insert_new_row',
                trigger_rule=TriggerRule.ALL_DONE,
                sql='''INSERT INTO table_name VALUES
                (%s, '{{ ti.xcom_pull(task_ids='execute_bash', key='return_value') }}', %s);''',
                parameters=(uuid.uuid4().int % 123456789, datetime.now()))

Upvotes: 5

Related Questions