我正在尝试用 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}')
"""
它产生的查询字符串为: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')
所以它做了 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}')
"""
返回格式正确的查询:SELECT
COUNT(DISTINCT case_id) AS counts
FROM
`gcp_project.dataset_user.person`
WHERE
identified_on = PARSE_DATE('%Y-%m-%d', '2020-09-07')
关于python - 同时使用 Python f-strings 和 Jinja,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63788781/