有没有人知道如何使用AIRFLOW_CONN_访问气流环境变量并在python代码中使用。我知道我们可以使用hook来获取密码,但是我一直试图在我的python中使用AIRFLOW_CONN来连接数据库。我已经在Airflow UI和文档中保存了连接,他们提到要使用AIRFLOW_CONN_前缀来使用conn_id。我使用os.environ ['AIRFLOW_CONN_REDSHIFT']在我的python代码中使用它,但它不识别环境变量。请帮忙。
答案 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
虽然我建议通过钩子取出它以避免重复此代码!