【问题标题】:Passing Env Var w/ single quote to YAML - python将带单引号的 Env Var 传递给 YAML - python
【发布时间】:2021-12-19 15:19:53
【问题描述】:

我试图在 yaml 的查询中使用 env var,但它不会获取值。 需要保留单引号,因为字符串中的雪花查询需要它。

yaml 文件是自定义框架(基于 python 构建)的输入,该框架加载雪花查询并作为 parquet 文件写入 s3。

要重复使用相同的查询,我想轮换不同的ZIP_VAR,这样我就不必为不同的ZIP_VAR 复制和粘贴相同的查询。

yaml 语法如下:

query: "
SELECT ZIP 
FROM TABLE.NAME
WHERE ZIP = '${ZIP_VAR}'"

我尝试过使用块标量(

query: |
SELECT ZIP 
FROM TABLE.NAME 
WHERE ZIP = '${ZIP_VAR}'

我做错什么语法了吗?有没有其他办法解决这个问题?

谢谢!

【问题讨论】:

  • 你用 YAML 做什么?你在用 Python 做什么?您希望使用什么工具来替换 env var(YAML 自己不会这样做)?请更完整地描述您的用例。
  • @flyx 刚刚更新了更多描述。如果还不清楚,请告诉我。
  • 根据问题“yaml 文件是自定义框架的输入”——这个问题是在询问自定义框架如何解析所述 yaml 文件吗?
  • @FelipeHoffa 问题是关于 yaml 语法的。如何在 yaml 中使用带单引号的 var 使其工作?还是根本不可行?希望这能回答你的问题。 :)

标签: python-3.x yaml snowflake-cloud-data-platform


【解决方案1】:

YAML 不知道环境变量,它不会将${…} 语法视为特殊的东西。 ${ZIP_VAR} 进去,${ZIP_VAR} 出来,不管引用。

我建议输入prepared statement,例如:

query: >
  SELECT ZIP 
  FROM TABLE.NAME
  WHERE ZIP = ?
args:
  - ZIP_VAR

然后让您的自定义框架从环境中获取args 中的每个参数并将其传递给数据库引擎。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-31
    • 2018-11-17
    相关资源
    最近更新 更多