我正在尝试在airflow上建立Oracle数据库连接。我得到这个错误:
ModuleNotFoundError:使用时没有名为"airflow.provideres.oracle.hooks.oracle"的模块
我的dag
文件的一部分:
from airflow.decorators import task
from airflow.providers.oracle.hooks.oracle import OracleHook
def exe_query_oracle_hook():
hook = OracleHook(oracle_conn_id="oracle_conn")
df = hook.get_pandas_df(sql='SELECT * FROM TABLE')
print(df.to_string())
我试着安装pip install apache-airflow-providers-oracle
,大多数都是必需的,我的当前版本是2.1.0。我还遵循了文档:气流建筑自定义图像。这是我的Dockerfile
FROM apache/airflow:2.1.0
ARG ORACLE_VERSION=11.2.0.4.0
ARG ORACLE_SHORT_VER=11204
ENV CLIENT_ZIP=instantclient-basiclite-linux.x64-${ORACLE_VERSION}.zip
ENV SDK_ZIP=instantclient-sdk-linux.x64-${ORACLE_VERSION}.zip
ENV ORACLE_HOME=/opt/oracle
ENV TNS_ADMIN ${ORACLE_HOME}/network/admin
WORKDIR ${ORACLE_HOME}
USER root
RUN apt-get update
&& apt-get -yq install unzip curl
&& apt-get clean
COPY dockerfiles/${CLIENT_ZIP} ${ORACLE_HOME}/${CLIENT_ZIP}
COPY dockerfiles/${SDK_ZIP} ${ORACLE_HOME}/${SDK_ZIP}
RUN unzip ${ORACLE_HOME}/${CLIENT_ZIP} && unzip ${ORACLE_HOME}/${SDK_ZIP}
&& rm -f *.zip
VOLUME ["${TNS_ADMIN}"]
RUN apt-get -yq install libaio1
&& apt-get autoremove
&& apt-get clean
&& echo ${ORACLE_HOME} > /etc/ld.so.conf.d/oracle.conf
&& mkdir -p ${TNS_ADMIN}
&& ldconfig
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
RUN pip install --no-cache-dir apache-airflow-providers-oracle
USER 1001
不知道还能尝试什么,有人能提供一些帮助吗?谢谢
您必须以气流用户的身份运行pip-install,目前您以root用户身份运行它。
...
USER 1001
RUN pip install --no-cache-dir apache-airflow-providers-oracle