cry*_*bhu 7 python jinja2 python-3.x
我正在尝试用 Python 编写一个简洁的 SQL 查询字符串,以同时使用 f-strings 和 Jinja。
背景信息:我正在编写一个在 Airflow 中使用的查询。
这不起作用:
query_string = f"""
SELECT
COUNT(DISTINCT case_id) AS counts
FROM
`{{var.value.gcp_project}}.{{var.value.dataset_prefix}}user.person`
WHERE
identified_on = PARSE_DATE('%Y-%m-%d', '{YESTERDAY_DATE_STR}')
"""
Run Code Online (Sandbox Code Playgroud)
它产生的查询字符串为:
SELECT
COUNT(DISTINCT case_id) AS counts
FROM
`{var.value.gcp_project}.{var.value.dataset_prefix}user.person`
WHERE
identified_on = PARSE_DATE('%Y-%m-%d', '2020-09-07')
Run Code Online (Sandbox Code Playgroud)
所以它做了 f-string 值替换而不是 Jinja。
如何让 f-strings 和 Jinja 同时工作?
我发现将大括号加倍{{并}}起作用。
双大括号被转义为一个,因为 Jinja 需要其中的 2 个,所以 4 个括号就可以了。
所以这个查询:
query_string = f"""
SELECT
COUNT(DISTINCT case_id) AS counts
FROM
`{{{{var.value.gcp_project}}}}.{{{{var.value.dataset_prefix}}}}user.person`
WHERE
identified_on = PARSE_DATE('%Y-%m-%d', '{YESTERDAY_DATE_STR}')
"""
Run Code Online (Sandbox Code Playgroud)
返回格式正确的查询:
SELECT
COUNT(DISTINCT case_id) AS counts
FROM
`gcp_project.dataset_user.person`
WHERE
identified_on = PARSE_DATE('%Y-%m-%d', '2020-09-07')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2181 次 |
| 最近记录: |