You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Airflow Python Operator中用绑定变量执行带参数的Oracle查询

正确实现方式

前置修正

先处理你代码里的笔误:你定义的变量名为last_snap_date,原拼接逻辑中误用为last_snap_date2,以下修改统一变量名。

核心修改逻辑

Oracle绑定变量使用:+变量名的格式作为占位符,不需要额外加单引号,直接作为TO_DATE的入参即可。调用get_records时传入parameters参数,类型为字典,key与SQL中的绑定变量名一一对应即可。

完整修改后代码

import cx_Oracle
from airflow.providers.oracle.hooks.oracle import OracleHook
from airflow import DAG
from airflow.operators.python import PythonOperator
from airflow.utils import dates

def _process():
    print('*********** Oracle Conection ***************')   
    # 初始化Oracle连接
    hook = OracleHook(oracle_conn_id="Oracle")
    last_snap_date = '2021-03-23'
    # 使用绑定变量传递参数
    value = hook.get_records(
        sql="select distinct ven as name from Execution Metrics where date > TO_DATE(:last_snap_date, 'YYYY-MM-DD')",
        parameters={"last_snap_date": last_snap_date}
    )
    # 可按需添加后续处理逻辑
    print(value)

with DAG(
    dag_id='OracleQuery',
    start_date=dates.days_ago(2),
    schedule_interval='@monthly',
    catchup=False,
) as dag :
    task_a = PythonOperator(
        task_id="QueryIntegration",
        python_callable=_process
    )

补充说明

该写法底层直接调用cx_Oracle的参数绑定能力,完全避免SQL注入风险,也无需手动处理字符串转义、日期格式拼接的兼容性问题。

内容的提问来源于stack exchange,提问作者Tarun teja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 17:33:03