Reputation: 103
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
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