如何在python代码中使用气流连接作为环境变量

时间:2017-09-15 07:53:46

标签: python-2.7 airflow

有没有人知道如何使用AIRFLOW_CONN_访问气流环境变量并在python代码中使用。我知道我们可以使用hook来获取密码,但是我一直试图在我的python中使用AIRFLOW_CONN来连接数据库。我已经在Airflow UI和文档中保存了连接,他们提到要使用AIRFLOW_CONN_前缀来使用conn_id。我使用os.environ ['AIRFLOW_CONN_REDSHIFT']在我的python代码中使用它,但它不识别环境变量。请帮忙。

1 个答案:

答案 0 :(得分:1)

保存与数据库的连接并设置AIRFLOW_CONN_环境变量是添加连接的两种不同方法。您应该只选择一种方式,除非您希望它们存储在连接ID下。

假设您通过PythonOperator之类的运算符运行python代码,您应该能够像BaseHook那样获取连接。

存储在数据库中:

@classmethod
def _get_connections_from_db(cls, conn_id):
    session = settings.Session()
    db = (
        session.query(Connection)
        .filter(Connection.conn_id == conn_id)
        .all()
    )
    session.expunge_all()
    session.close()
    if not db:
        raise AirflowException(
            "The conn_id `{0}` isn't defined".format(conn_id))
    return db

存储在环境变量中:

@classmethod
def _get_connection_from_env(cls, conn_id):
    environment_uri = os.environ.get(CONN_ENV_PREFIX + conn_id.upper())
    conn = None
    if environment_uri:
        conn = Connection(conn_id=conn_id, uri=environment_uri)
    return conn

虽然我建议通过钩子取出它以避免重复此代码!